我有一个带有Apache + Passenger的服务器。
我该如何在生产环境中运行sidekiq
?是否需要任何配置来运行它?
bundle exec sidekiq
谢谢
我有一个带有Apache + Passenger的服务器。
我该如何在生产环境中运行sidekiq
?是否需要任何配置来运行它?
bundle exec sidekiq
谢谢
bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e production
-d
, 将进程作为守护进程运行
-L
, 指定可写日志文件的路径
-C
, 指定YAML配置文件的路径
-e
, 应用程序环境
ps aux | grep sidekiq | grep -v grep | awk '{print $2}'
的进程,然后执行 bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e production
。 - DeeDub使用操作系统提供的进程监管器比使用守护进程-d标志更好的解决方案。这也是sidekiq gem's wiki提供的建议:
我强烈建议不要使用-d标志,而是使用进程监管器如systemd或upstart来管理Sidekiq(或任何其他服务器守护程序)。这可以确保如果Sidekiq由于某种原因崩溃,它将立即重新启动。
该wiki提供了upstart和systemd的示例配置文件,可以在repo的"examples"目录中找到。
注意:在我的CentOS 7服务器上,我使用rvm(Ruby版本管理器)。我必须执行额外的步骤来确保我的systemd脚本(/etc/systemd/system/sidekiq.service)能够可靠地启动和停止sidekiq,即使我的ruby和/或gemset路径在未来发生变化。最重要的指令是"ExecStart",在我的脚本中看起来像下面这样:
ExecStart=/usr/local/rvm/wrappers/surveil/bundler exec sidekiq -e production -L log/sidekiq.log -C config/sidekiq.yml
路径的一部分 "/usr/local/rvm/wrappers/surveil" 实际上是一个符号链接,在部署期间我使用 'rvm alias' 的帮助重新创建它,以确保它始终指向应用程序的 Ruby 版本和 gemset,两者都有可能在不同的部署之间发生变化。这是通过创建一个在部署期间运行的 rake 任务来实现的,该任务执行以下等效操作:
rvm alias delete surveil
rvm alias create surveil ruby-#{new_ruby_version}@#{new_gemset_name}
当您启动Sidekiq时,通过传递-d参数,应该能够将其作为后台进程(守护程序)启动:
bundle exec sidekiq -d
。
虽然此答案现在对您有用,但请注意,如果任何原因导致Sidekiq进程崩溃,进程必须手动重新启动。 了解如何更可靠地运行Sidekiq生产环境的好开始位置在这里:https://github.com/mperham/sidekiq/wiki/Deployment