Ruby on rails Rails:不使用upstart脚本管理多个sidekiq

Ruby on rails Rails:不使用upstart脚本管理多个sidekiq,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,从前,我有一个应用程序-Cashyy。它使用sidekiq。我部署了它,并使用它来管理sidekiq(启动/重启) 我决定在同一台服务器上部署另一个应用程序。这个应用程序(我们称之为Giimee)也使用sidekiq 这就是问题所在。有时我需要为Cashyy重新启动sidekiq,但不是为Giimee。现在,据我所知,我需要使用index东西(在upstart脚本和管理sidekiq中:sudo restart sidekiq index=1)(如果我理解正确的话) 但是 我不想涉足这些索引(需

从前,我有一个应用程序-Cashyy。它使用sidekiq。我部署了它,并使用它来管理sidekiq(启动/重启)

我决定在同一台服务器上部署另一个应用程序。这个应用程序(我们称之为Giimee)也使用sidekiq

这就是问题所在。有时我需要为Cashyy重新启动sidekiq,但不是为Giimee。现在,据我所知,我需要使用
index
东西(在upstart脚本和管理sidekiq中:
sudo restart sidekiq index=1
)(如果我理解正确的话)

但是

我不想涉足这些索引(需要支持的噩梦?就像你需要知道有多少应用程序在使用sidekiq,并确保为每个sidekiq分配唯一的索引。如果你想重新启动特定的sidekiq,还需要知道分配的索引)

因此,问题是:我如何隔离每个sidekiq(这样我就不需要维护
索引
),并且仍然获得upstart的稳定性和可用性(启动流程、重新启动等)


或者可能我不了解一些东西,
索引的功能是最先进的?

作为upstart脚本的替代方案,您可以使用和管理这些sidekiq

我们在3台机器上运行了Sidekiq,并且对这两个库/工具有很好的经验

注意:我们目前使用的是Capistrano(2.15.5)的旧版本

在我们的体系结构中,这三台机器在部署时略微定制。这导致我们将capistrano部署脚本按机器拆分,以便我们可以自定义一些类、管理Sidekiq等。我们的capistrano文件的结构如下:

- config/
  - deploy.rb
  - deploy/ 
    - gandalf.rb
    - gollum.rb
    - legolas.rb
有了capistrano sidekiq,我们可以随时(在部署或其他过程中)控制sidekiq:)。我们通过以下方式设置部署脚本的Sidekiq方面:

# config/deploy.rb
# global sidekiq settings
set :sidekiq_default_hooks, false
set :sidekiq_cmd, "#{fetch(:bundle_cmd, 'bundle')} exec sidekiq"
set :sidekiqctl_cmd, "#{fetch(:bundle_cmd, 'bundle')} exec sidekiqctl"    
set :sidekiq_role, :app
set :sidekiq_pid, "#{current_path}/tmp/pids/sidekiq.pid"
set :sidekiq_env,  fetch(:rack_env, fetch(:rails_env, fetch(:default_stage)))
set :sidekiq_log,  File.join(shared_path, 'log', 'sidekiq.log')

# config/deploy/gandalf.rb 
# Custom Sidekiq settings 
set :sidekiq_timeout, 30
set :sidekiq_processes, 1
namespace :sidekiq do
  # .. code omitted from methods and tasks for brevity
  def for_each_process(&block)   
  end

  desc 'Quiet sidekiq (stop accepting new work)'
  task :quiet, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
  end

  desc 'Stop sidekiq'
  task :stop, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
  end

  desc 'Start sidekiq'
  task :start, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
  end

  desc 'Restart sidekiq'
  task :restart, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
  end    
end
当我需要重新启动一个Sidekiq实例时,我只需转到终端并执行以下操作:

$ bundle exec cap gandalf sidekiq:restart
$ bundle exec cap gollum sidekiq:stop 

这使得Sidekiq管理对我们的团队来说相当轻松,并且认为值得分享,因为类似的东西可以帮助您解决问题

作为upstart脚本的替代方案,您可以使用和管理这些sidekiq

我们在3台机器上运行了Sidekiq,并且对这两个库/工具有很好的经验

注意:我们目前使用的是Capistrano(2.15.5)的旧版本

在我们的体系结构中,这三台机器在部署时略微定制。这导致我们将capistrano部署脚本按机器拆分,以便我们可以自定义一些类、管理Sidekiq等。我们的capistrano文件的结构如下:

- config/
  - deploy.rb
  - deploy/ 
    - gandalf.rb
    - gollum.rb
    - legolas.rb
有了capistrano sidekiq,我们可以随时(在部署或其他过程中)控制sidekiq:)。我们通过以下方式设置部署脚本的Sidekiq方面:

# config/deploy.rb
# global sidekiq settings
set :sidekiq_default_hooks, false
set :sidekiq_cmd, "#{fetch(:bundle_cmd, 'bundle')} exec sidekiq"
set :sidekiqctl_cmd, "#{fetch(:bundle_cmd, 'bundle')} exec sidekiqctl"    
set :sidekiq_role, :app
set :sidekiq_pid, "#{current_path}/tmp/pids/sidekiq.pid"
set :sidekiq_env,  fetch(:rack_env, fetch(:rails_env, fetch(:default_stage)))
set :sidekiq_log,  File.join(shared_path, 'log', 'sidekiq.log')

# config/deploy/gandalf.rb 
# Custom Sidekiq settings 
set :sidekiq_timeout, 30
set :sidekiq_processes, 1
namespace :sidekiq do
  # .. code omitted from methods and tasks for brevity
  def for_each_process(&block)   
  end

  desc 'Quiet sidekiq (stop accepting new work)'
  task :quiet, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
  end

  desc 'Stop sidekiq'
  task :stop, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
  end

  desc 'Start sidekiq'
  task :start, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
  end

  desc 'Restart sidekiq'
  task :restart, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
  end    
end
当我需要重新启动一个Sidekiq实例时,我只需转到终端并执行以下操作:

$ bundle exec cap gandalf sidekiq:restart
$ bundle exec cap gollum sidekiq:stop 

这使得Sidekiq管理对我们的团队来说相当轻松,并且认为值得分享,因为类似的东西可以帮助您解决问题

您可以创建两个服务:

cp sidekiq.conf /etc/init/cashyy.conf
cp sidekiq.conf /etc/init/glimee.conf

根据需要编辑每个<代码>sudo start cashyy
sudo stop glimee
,等等。现在您将运行两个完全独立的Sidekiq进程。

您创建了两个服务:

cp sidekiq.conf /etc/init/cashyy.conf
cp sidekiq.conf /etc/init/glimee.conf
根据需要编辑每个
sudo start cashyy
sudo stop glimee
,等等。现在您将有两个完全独立的Sidekiq进程运行