2014-04-09 63 views
32

我有一个服务器与Apache +乘客。如何在生产服务器上运行sidekiq?

如何在生产中运行sidekiq?任何配置需要运行

bundle exec sidekiq 

感谢

+0

您应该运行Redis服务器 - 就这些了。 –

+0

我在控制台redis-server上运行,它说[14754] 4月9日10:07:13#打开端口:bind:地址已经在使用中。 但是,如果我发送电子邮件,它不起作用。没有电子邮件得到 – Debadatt

+0

@MarekLipka ..请建议如何解决这个问题? – Debadatt

回答

14

你应该能够启动Sidekiq作为后台进程(守护进程)通过将-d参数,当你启动它:

bundle exec sidekiq -d

尽管此答案现在适用于您,请注意,如果由于某种原因,sidekiq进程崩溃,必须手动重新启动进程。为找出有关更稳健的方式来运行生产sidekiq一个很好的起点就在这里:https://github.com/mperham/sidekiq/wiki/Deployment

89

bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e production

-d,守护进程过程

-L,路径可写日志文件

-C,路径到YAML配置文件

-e,应用环境

+0

如果sidekiq进程因任何原因崩溃,我们将如何重新启动? – Debadatt

+4

杀死'ps aux | grep sidekiq | grep -v grep | awk'{print $ 2}' 然后,bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e production – TNCodeMonkey

9

比使用守护进程-d标志更好的解决方案是利用OS提供的进程监督程序。这也是recommendation given by the sidekiq gem's wiki

我强烈建议人们不要使用-d标志,而是使用过程中的导师喜欢systemd或暴发户管理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 /本地/ RVM /包装/ surveil”的一部分,实际上是一个符号,这是我在部署期间通过'rvm alias'的协助重新创建,以确保它始终指向应用程序的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”总是指向正确版本的打包程序,因此会从打包程序中获益,从而使其目标在应用程序的配置的ruby/gem环境中运行。

相关问题