作爲新貴腳本的替代品,您可以使用Capistrano和Capistrano-Sidekiq來管理這些Sidekiq。
我們的Sidekiq在3臺機器上運行,並且對這兩個庫/工具有很好的體驗。
注意:我們目前使用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管理團隊對我們的團隊非常輕鬆,並認爲如果類似的事情能夠幫助您解決問題,值得分享。