Sidekiq kann in mehreren Umgebungen bereitgestellt werden
(Siehe unten für meine detaillierte Konfiguration, die das Ergebnis von Henley Chius Antwort ist).
Ich habe versucht, mein Gehirn um Sidekiq-Bereitstellungen zu wickeln, und ich verstehe es nicht wirklich. Ich habe eine App mit einer Staging-Umgebung und einer Produktionsumgebung auf demselben Server. Alles, was ich über sidekiq-Bereitstellungen sehe, besagt im Grunde genommen "füge sidekiq / capistrano zu deiner Bereitstellungsdatei hinzu", also habe ich das getan. Und dann sind die Anweisungen "Hier ist eine YML-Datei mit Optionen", aber nichts scheint erklärt zu werden. Benötige ich Namespaces? Ich sehe das in einer Initialisierungsdatei, aber das scheint zu sein, außerhalb des Servers zu zeigen.
Ich habe es früher bereitgestellt, und jede Phase scheint sidekiq mit der richtigen Umgebung hochzufahren, aber beide werden in denselben Warteschlangen verarbeitet. Meine E-Mails aus der Produktion versuchten, vom Stage Sidekiq verarbeitet zu werden und versagten. Ich habe meine Bühne fürs Erste angehalten, aber irgendwann muss ich sie wieder benutzen. Ich hoffe, ich bin nicht dicht, ich habe wirklich versucht, das zu verstehen, und es fällt mir nur schwer, ein endgültiges "hier ist, wie es gemacht wird" zu finden.
Für das, was es wert ist, ist hier config / sidekiq.yml (die während der Bereitstellung gut geladen wird):
:concurrency: 5
:verbose: false
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
- [carrierwave, 7]
- [client_emails, 5]
- [default, 3]
staging:
:concurrency: 10
production:
:concurrency: 25
Protokolldateien und PIDs scheinen am richtigen Ort zu sein, aber die Warteschlangen werden nur zusammengeführt. Jede Hilfe wäre toll!
Auch wenn es darauf ankommt:
Rails 3.2.11, passenger, nginx, rvm, Ubuntu 12.10, and Ruby 1.9.3
Detaillierte Konfiguration (Antwort):Zuerst habe ich einen neuen Redis-Server an Port 7777 (oder einem anderen Port als dem Standard-6379) eingerichtet. Ziemlich viel folgte demRedis Quickstart-Anleitung dass ich das erste mal benutzt habe.
Dann habe ich die Initilizer-Datei erstellt. Dies hat sowohl die Client- als auch die Serverkonfiguration. Beides ist erforderlich, damit sidekiq mehrstufig funktioniert.
Beachten Sie, dass ich für die Einstellungen eine externe YAML-Datei verwende. ich benutzeSettingsLogic Damit es einfacher wird, aber Sie können es genauso einfach tunTun Sie dies selbst, indem Sie die Datei einschließen. Durch die Verwendung einer Yaml-Datei müssen wir unsere Umgebungen / Staging- oder Produktionsdateien nicht berühren.
# config/initializers/sidekiq.rb
server = Settings.redis.server
port = Settings.redis.port
db_num = Settings.redis.db_num
namespace = Settings.redis.namespace
Sidekiq.configure_server do |config|
config.redis = { url: "redis://#{server}:#{port}/#{db_num}", namespace: namespace }
end
Ich benutze Passagier - dieFehlerbehebungsseite des sidekiq-Wikis empfiehlt eine Änderung des Setups bei Verwendung eines Einhorns oder Beifahrers, daher habe ich den Code für das Client-Setup dort hinzugefügt:
# config/initializers/sidekiq.rb (still)
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
Sidekiq.configure_client do |config|
config.redis = { url: "redis://#{server}:#{port}/#{db_num}", namespace: namespace }
end if forked
end
end
Dies ist meine Einstellungsdatei (offensichtlich Werte geändert):
#config/settings.yml
defaults: &defaults
redis: &redis_defaults
server: 'localhost'
port: 6379
db_num: 0
namespace: 'sidekiq_development'
development:
<<: *defaults
test:
<<: *defaults
staging:
<<: *defaults
redis:
<<: *redis_defaults
port: 8888
namespace: 'sidekiq_staging'
production:
<<: *defaults
redis:
<<: *redis_defaults
port: 7777
namespace: 'sidekiq_production'
Ich habe festgestellt, dass das Hinzufügen des Namespace zur Datei config / sidekiq.yml nicht funktioniert - sidekiq würde bei der Bereitstellung über den richtigen Port gestartet, aber tatsächlich nichts verarbeiten. Da das Wiki jedoch die Verwendung eines Namespaces empfiehlt, habe ich ihn letztendlich nur der Init-Datei hinzugefügt.
Ich hoffe, dass dies für andere hilfreich ist, da dies für mich sehr schwer zu verstehen war, da ich vorher noch nicht viel von dieser Art von Einrichtung gemacht habe.