【问题标题】:Sidekiq with Capistrano (2.x) - is needed to set up restarting Sidekiq after every delpoyment?Sidekiq with Capistrano (2.x) - 每次部署后都需要重新启动 Sidekiq?
【发布时间】:2016-06-11 20:21:27
【问题描述】:

我正在使用 Sidekiq 并使用 Capistrano 来部署应用程序。

到目前为止,我使用的是 gem 'capistrano-sidekiq' , group: :development gem,并且因为我之前使用的是 DelaydedJob,所以我需要从我当前的部署文件中删除这些行:

set :delayed_job_command, "bin/delayed_job"
after "deploy:start", "delayed_job:start"
after "deploy:stop", "delayed_job:stop"

我需要为 Sidekiq 添加什么到 Capistrano 以确保 Sidekiq 始终运行(意味着在我将一些代码部署到服务器后它不会被中断/停止?

或者 gem 会在每次部署后自动(重新)启动 Sidekiq?

【问题讨论】:

  • 您希望 sidekiq 重新启动。如果没有,那么您的工作中将包含陈旧的代码。所有这些都在内存中运行。因此,如果您更新 Rails 代码,仅部署新代码不会更新 sidekiq 中运行的内容。
  • 我在下面回答了你的问题吗?

标签: ruby-on-rails ruby capistrano sidekiq


【解决方案1】:

部署后,Sidekiq 在 Capistrano 2.x 中自动重启。

管理它的 capistrano-sidekiq gem 说:

if fetch(:sidekiq_default_hooks)
    before 'deploy:update_code', 'sidekiq:quiet'
    after 'deploy:stop', 'sidekiq:stop'
    after 'deploy:start', 'sidekiq:start'
    before 'deploy:restart', 'sidekiq:restart'
  end

在 gem 文件 lib/capistrano/tasks/capistrano2.rb 的第 26-31 行。

:sidekiq_default_hooks 设置在块中

Capistrano::Configuration.instance.load do

  _cset(:sidekiq_default_hooks) { true }

在它之上,所以它是一个由该特定环境的配置加载的 Capistrano 实例变量。

sidekiq:quiet 命令运行

run_as "if [ -d #{current_path} ] && [ -f #{pid_file} ] && kill -0 `cat #{pid_file}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} quiet #{pid_file} ; else echo 'Sidekiq is not running'; fi"

我假设通过使用默认 Capistrano 2 部署配置,您的部署过程将如下所示:

因此-基于此,您可以确认它每次都会重新启动。如果您愿意,您可以使用 Capistrano 2 手动更改部署过程,或者您也可以更改 :sidekiq_default_hooks 变量并以这种方式定义您自己的 Sidekiq 进程。

【讨论】:

    猜你喜欢
    • 2017-04-30
    • 2016-11-08
    • 2016-10-31
    • 2013-06-30
    • 2016-08-19
    • 2014-07-23
    • 1970-01-01
    • 2012-08-09
    • 2012-10-03
    相关资源
    最近更新 更多