我有一个带apache + passenger的服务器。
如何在生产中运行sidekiq
?运行
bundle exec sidekiq
由于
答案 0 :(得分:110)
bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e production
-d
,Daemonize进程
-L
,可写日志文件的路径
-C
,YAML配置文件的路径
-e
,应用程序环境
答案 1 :(得分:15)
你应该能够通过在启动时传递-d参数来启动Sidekiq作为后台进程(守护进程):
bundle exec sidekiq -d
。
虽然这个答案现在适合您,但请注意如果sidekiq进程因任何原因崩溃,则必须手动重新启动该进程。这里有一个很好的起点,可以找到更有效的方法来运行sidekiq:https://github.com/mperham/sidekiq/wiki/Deployment
答案 2 :(得分:14)
比使用daemonization -d标志更好的解决方案是利用操作系统提供的进程监控程序。这也是recommendation given by the sidekiq gem's wiki:
我强烈建议人们不要使用-d标志,而是使用像systemd或upstart这样的进程管理器来管理Sidekiq(或任何其他服务器守护进程)。这样可以确保Sidekiq在出于某种原因崩溃时立即重启。
wiki为"examples" directory of the repo中的upstart和systemd提供了示例配置文件。
注意强> 在我的CentOS 7服务器上,我使用rvm(Ruby Version Manger)。我必须执行额外的步骤以确保我的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'的帮助下重新创建,以确保它始终指向应用程序的红宝石版本和gemset,两者都可以从一个部署切换到另一个部署。这是通过创建在部署期间运行的rake任务来实现的,并执行以下等效操作:
rvm alias delete surveil
rvm alias create surveil ruby-#{new_ruby_version}@#{new_gemset_name}
通过在部署期间设置此别名/符号链接,我可以安全地保持systemd脚本不受影响,并且它将继续正常工作。这是因为路径“/ usr / local / rvm / wrappers / surveil / bundler”总是指向正确的捆绑器版本,因此从捆绑器魔法中获益,导致其目标在应用程序配置的ruby / gem环境中运行。 / p>