首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sidekiq不会在heroku上生成sidekiq.pid文件,使用with Redistogo

sidekiq不会在heroku上生成sidekiq.pid文件,使用with Redistogo
EN

Stack Overflow用户
提问于 2014-09-24 07:59:07
回答 3查看 9.3K关注 0票数 19

我已经为在heroku生产环境上获得sidekiq工作而苦苦挣扎了两天。我已经阅读了所有关于类似问题的可用文档,但仍然无法产生一个有效的解决方案,我真的需要一些帮助!

在heroku上部署后,我的应用程序崩溃,并得到以下错误堆栈跟踪:

代码语言:javascript
复制
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中的内容

代码语言:javascript
复制
web: bundle exec rails server
worker: bundle exec sidekiq -C config/sidekiq.yml

以下是我的config/sidekiq.yml中的内容

代码语言:javascript
复制
---
: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中的内容

代码语言:javascript
复制
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同步的carrierwavecarrierwave-backgrounder

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-24 14:22:18

已通过以下操作解决此问题:

1)感谢@MikePerham为我指明了正确的方向,首先我删除了sidekiq.yml文件中的这一行:

代码语言:javascript
复制
:pidfile: ./tmp/pids/sidekiq.pid

2)然后,在我的Procfile中,我不得不使用下面这行代码来替换原点:

代码语言:javascript
复制
web: bundle exec rails server -p $PORT
worker: bundle exec sidekiq -C config/sidekiq.yml

现在sidekiq可以为我在heroku上正常工作了。

票数 28
EN

Stack Overflow用户

发布于 2015-08-15 01:48:29

我发现将目录添加到存储库并重新部署应用程序非常有用。

代码语言:javascript
复制
mkdir -p tmp/pids
touch tmp/pids/.gitkeep
git add -f tmp/pids/.gitkeep
git commit -m 'Keep tmp/pids directory in repo'

希望这能有所帮助。

票数 14
EN

Stack Overflow用户

发布于 2014-12-27 17:06:01

已通过在项目根目录的tmp目录中创建pids目录修复此问题

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26006496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档