为了让 sidekiq 在 heroku 生产环境上工作,我已经苦苦挣扎了两天。我已经阅读了有关类似问题的所有可用文档,但仍然无法产生有效的解决方案,我真的很需要帮助!
在 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用于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
这是我的内容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
:
我正在使用carrierwave
并carrierwave-backgrounder
与sidekiq
.