gpt4 book ai didi

ruby-on-rails - 与Redistogo一起使用时,sidekiq不会在heroku上生成sidekiq.pid文件

转载 作者:行者123 更新时间:2023-12-03 12:26:14 27 4
gpt4 key购买 nike

我一直在为在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进行Redis,在本地生产中,sidekiq已正确指向REDISTOGO并运行良好。

其次,根据堆栈跟踪,尤其是这行 No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid;它使我认为出于某种原因在heroku上运行时 sidekiq.pid文件未正确生成。在本地环境中,每次我在 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:

我正在使用 carrierwavecarrierwave-backgroundersidekiq同步。

最佳答案

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

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

:pidfile: ./tmp/pids/sidekiq.pid

2)然后,在我的 Procfile中,我必须使用以下行替换原点:
web: bundle exec rails server -p $PORT
worker: bundle exec sidekiq -C config/sidekiq.yml

现在,sidekiq对我在heroku上的redistogo正常工作。

关于ruby-on-rails - 与Redistogo一起使用时,sidekiq不会在heroku上生成sidekiq.pid文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26006496/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com