我已经为在heroku生产环境上获得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首先,sidekiq在我的本地机器上工作正常。我正在使用heroku的REDISTOGO for redis,在本地产品上,sidekiq已经正确地指向了REDISTOGO,并且运行良好。
其次,根据堆栈跟踪,特别是这一行No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid;它使我认为由于某些原因,在heroku上运行时不能正确生成sidekiq.pid文件。在本地环境中,每次我在app/tmp/pids/目录中启动应用程序时都会生成sidekiq.pid文件,并且每次都会分配一个不同的pid编号。我是guessing,当在heroku上运行时,sidekiq试图从这个文件中读取,但没有找到它。
以下是我的Procfile中的内容
web: bundle exec rails server
worker: bundle exec sidekiq -C config/sidekiq.yml以下是我的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以下是我的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更新1
我正在使用与sidekiq同步的carrierwave和carrierwave-backgrounder。
发布于 2014-09-24 14:22:18
已通过以下操作解决此问题:
1)感谢@MikePerham为我指明了正确的方向,首先我删除了sidekiq.yml文件中的这一行:
:pidfile: ./tmp/pids/sidekiq.pid2)然后,在我的Procfile中,我不得不使用下面这行代码来替换原点:
web: bundle exec rails server -p $PORT
worker: bundle exec sidekiq -C config/sidekiq.yml现在sidekiq可以为我在heroku上正常工作了。
发布于 2015-08-15 01:48:29
我发现将目录添加到存储库并重新部署应用程序非常有用。
mkdir -p tmp/pids
touch tmp/pids/.gitkeep
git add -f tmp/pids/.gitkeep
git commit -m 'Keep tmp/pids directory in repo'希望这能有所帮助。
发布于 2014-12-27 17:06:01
已通过在项目根目录的tmp目录中创建pids目录修复此问题
https://stackoverflow.com/questions/26006496
复制相似问题