Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在生产服务器中运行sidekiq?_Ruby On Rails_Sidekiq - Fatal编程技术网

Ruby on rails 如何在生产服务器中运行sidekiq?

Ruby on rails 如何在生产服务器中运行sidekiq?,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,我有一个带有apache+passenger的服务器 如何在生产中运行sidekiq?运行所需的任何配置 bundle exec sidekiq 谢谢您应该能够在启动Sidekiq时通过传递-d参数作为后台进程(守护进程)启动Sidekiq: bundle exec sidekiq-d 虽然这个答案现在应该适用于您,但请注意,如果sidekiq进程因任何原因崩溃,则必须手动重新启动该进程。找到在生产中运行sidekiq的更健壮的方法的一个好起点是:bundle exec sidekiq-d-L

我有一个带有apache+passenger的服务器

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

bundle exec sidekiq

谢谢

您应该能够在启动Sidekiq时通过传递-d参数作为后台进程(守护进程)启动Sidekiq:


bundle exec sidekiq-d


虽然这个答案现在应该适用于您,但请注意,如果sidekiq进程因任何原因崩溃,则必须手动重新启动该进程。找到在生产中运行sidekiq的更健壮的方法的一个好起点是:

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

-d
,后台进程

-L
,可写日志文件的路径

-C
,YAML配置文件的路径


-e
,Application environment

一个比使用daemonization-d标志更好的解决方案是利用操作系统提供的流程管理器。这也是:

我强烈建议人们不要使用-d标志,而是使用systemd或upstart之类的流程管理器来管理Sidekiq(或任何其他服务器守护进程)。这确保了Sidekiq在因某种原因崩溃时会立即重新启动

wiki提供了在中找到的upstart和systemd的示例配置文件

注意 在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”的一部分实际上是一个符号链接,我在部署期间在的帮助下重新创建了该符号链接,以确保它始终指向应用程序的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的正确版本,因此从bundler魔法中获益,bundler魔法使其目标在应用程序配置的ruby/gem环境中运行。

您应该让Redis server运行——仅此而已。我在控制台Redis server中运行,它说[14754]09 Apr 10:07:13#打开端口:绑定:地址已在使用。但如果我发送电子邮件,它就不起作用了。没有电子邮件getting@MarekLipka.. 请建议如何解决这个问题?@MarekLipka。。使用capistrano运行命令“bundle exec sidekicq”。。他正在工作。如果sidekiq进程因任何原因崩溃,我们将如何重新启动?杀死'ps aux | grep sidekiq | grep-v grep | awk'{print$2}',然后,bundle exec sidekiq-d-L log/sidekiq.log-C config/sidekiq.yml-e production这不再是一个有效的答案。请参阅Brian Warren的答案,了解正确的方法。这应该是公认的答案。在sidekiq版本>6.0的守护进程中,-d”标志已被弃用