Ste*_*ens 19 pid ruby-on-rails heroku redistogo sidekiq
我一直在为herki生产环境中的sidekiq工作而奋斗了两天.我已经阅读了有关类似问题的所有可用文档,但仍然无法生成有效的解决方案,我真的很喜欢一些帮助!
在heroku上部署后,我的应用程序崩溃,我得到以下错误堆栈跟踪:
2014-09-23T23:38:40.905093+00:00 app[worker.1]: No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid
2014-09-23T23:38:40.905122+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/bin/sidekiq:23:in `<main>'
2014-09-23T23:38:40.905119+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/bin/sidekiq:7:in `<top (required)>'
2014-09-23T23:38:40.905117+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `write_pid'
2014-09-23T23:38:40.905115+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `open'
2014-09-23T23:38:40.905121+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/bin/sidekiq:23:in `load'
2014-09-23T23:38:40.905118+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:41:in `parse'
2014-09-23T23:38:40.905114+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `initialize'
2014-09-23T23:38:39.588001+00:00 heroku[worker.1]: State changed from starting to up
Run Code Online (Sandbox Code Playgroud)
首先,sidekiq在我的本地机器上正常工作.我正在使用heroku的REDISTOGO进行redis,在本地制作中,sidekiq已正确指向REDISTOGO且运行良好.
第二,根据堆栈轨迹,特别是这条线No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid; 它让我认为,由于某种原因sidekiq.pid,在heroku上运行时文件没有正确生成.在本地环境中,sidekiq.pid每次在app/tmp/pids/目录中启动应用程序时都会生成文件,并且pid每次都会分配不同的编号.我就是guessing在heroku上运行时,sidekiq试图从这个文件中读取但却找不到它.
这是我的内容Procfile:
web: bundle exec rails server
worker: bundle exec sidekiq -C config/sidekiq.yml
Run Code Online (Sandbox Code Playgroud)
这是我的内容 config/sidekiq.yml
---
:verbose: true
:pidfile: ./tmp/pids/sidekiq.pid
:concurrency: 25
# Set timeout to 8 on Heroku, longer if you manage your own systems.
:timeout: 8
:queues:
- carrierwave
Run Code Online (Sandbox Code Playgroud)
这是我的内容 sidekiq.rb
Sidekiq.configure_server do |config|
config.redis = { :url => ENV['REDISTOGO_URL'], :namespace => "mynamespece"}
end
Sidekiq.configure_client do |config|
config.redis = { :url => ENV['REDISTOGO_URL'], :namespace => "mynamespece"}
end
Run Code Online (Sandbox Code Playgroud)
更新1:
我正在使用carrierwave并carrierwave-backgrounder与之同步sidekiq.
Ste*_*ens 27
此问题已通过以下操作解决:
1)感谢@MikePerham指出我正确的方向,首先我在我的sidekiq.yml文件中删除了这一行:
:pidfile: ./tmp/pids/sidekiq.pid
Run Code Online (Sandbox Code Playgroud)
2)然后,在我Procfile,我不得不使用以下行来替换原点:
web: bundle exec rails server -p $PORT
worker: bundle exec sidekiq -C config/sidekiq.yml
Run Code Online (Sandbox Code Playgroud)
现在sidekiq正在和heroku上的redistogo一起正常工作.
hal*_*ube 12
我发现将目录添加到存储库并重新部署应用程序很有用.
mkdir -p tmp/pids
touch tmp/pids/.gitkeep
git add -f tmp/pids/.gitkeep
git commit -m 'Keep tmp/pids directory in repo'
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
8366 次 |
| 最近记录: |