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