2016-05-24 10 views
0

Es war einmal, ich hatte eine App - Cashyy. Es benutzte Sidekiq. Ich habe es eingesetzt und dieses upstart script verwendet, um Sidekiq zu verwalten (Start/Neustart).Rails: Verwaltung mehrerer Sidekiqs ohne Upstart Skript

Ich entscheide mich für die Bereitstellung einer anderen App auf demselben Server. Die App (nennen wir es Giimee) verwendet auch sidekiq.

Und hier ist das Problem. Manchmal muss ich sidekiq für Cashyy neu starten, aber nicht für Giimee. Nun, wie ich verstehe, muss ich etwas hacken mit index Sache (in Upstart-Skript und Verwaltung sidekiqs: sudo restart sidekiq index=1) (wenn ich es richtig verstanden habe).

ABER!

Ich habe keine Lust, mit diesen Indizes zu experimentieren (Alptraum zu unterstützen? Wie Sie wissen müssen, wie viele Apps sidekiq verwenden und sicher sein, jedem Sidekiq eindeutigen Index zuzuweisen. Und den zugewiesenen Index zu wissen, wenn Sie neu starten möchten spezifische Sidekiq).

Also hier ist die Frage: Wie kann ich jeden sidekiq isolieren (so würde ich nicht die index pflegen müssen) und immer noch die Stabilität und Benutzerfreundlichkeit von Upstart (Starten des Prozesses, Neustart, etc.)?

Oder vielleicht verstehe ich etwas nicht und die Sache mit index ist Stand der Technik?

Antwort

1

Sie erstellen zwei Dienste:

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

bearbeiten jeweils nach Bedarf. sudo start cashyy, sudo stop glimee usw. Jetzt haben Sie zwei völlig separate Sidekiq-Prozesse.

1

Als Alternative zu einem Upstart-Skript können Sie die Sidekiqs mit Capistrano und Capistrano-Sidekiq verwalten.

Wir haben Sidekiq läuft auf 3 Maschinen und hatten eine gute Erfahrung mit diesen beiden Bibliotheken/Tools.

Hinweis: wir derzeit eine ältere Version von Capistrano verwenden (2.15.5)

In unserer Architektur, die drei Maschinen sind leicht zu implementierende angepasst. Dies führte uns unsere capistrano so maschinell Skripte zu brechen einsetzen, dass wir einige Klassen anpassen könnten, verwalten Sidekiq, etc. Unsere Capistrano Dateien so etwas wie diese strukturiert sind:

- config/ 
    - deploy.rb 
    - deploy/ 
    - gandalf.rb 
    - gollum.rb 
    - legolas.rb 

Mit Capistrano-sidekiq, wir sind in der Lage Kontrolle, gut, Sidekiq :) zu jeder Zeit (während einer Bereitstellung oder auf andere Weise). Wir setzen die Sidekiq Aspekte unserer deploy-Skripte in der folgenden Art und Weise nach oben:

# 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 

Als ich eines meiner Sidekiq Instanzen neu starten müssen, kann ich zu meinem Terminal gehen Sie einfach und führen Sie die folgenden Schritte aus:

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

Es hat Sidekiq Management ziemlich schmerzlos für unser Team gemacht und dachte, es wäre wert, geteilt zu werden, wenn etwas Ähnliches Ihnen helfen könnte.

Verwandte Themen