Ich habe unerwartete und schwerwiegende Probleme beim Versuch, eine Rails-App unter Unicorn zu erhalten, um eine Verbindung zu einem passwortgeschützten Redis-Server herzustellen.Resque nimmt keine Redis-Konfigurationseinstellungen auf
Mit bundle exec rails c production
in der Befehlszeile kann ich Befehle über Resque.redis erteilen. Es scheint jedoch, dass meine Konfiguration verloren geht, wenn sie unter Unicorn gegabelt wird.
Verwenden eines nicht passwortgeschützten Redis-Servers Just Works. Ich beabsichtige jedoch, Mitarbeiter auf anderen Servern als dem, auf dem der Redis-Server lebt, zu betreiben. Daher muss ich dieses Passwort schützen.
Ich hatte auch Erfolg in der Verwendung eines passwortgeschützten (mit der gleichen Technik), aber mit Passenger anstelle von Unicorn.
Ich habe folgendes Setup:
# config/resque.yml
development: localhost:6379
test: localhost:6379
production: redis://user:[email protected]:6379
.
# config/initializers/redis.rb
rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/../..'
rails_env = ENV['RAILS_ENV'] || 'development'
$resque_config = YAML.load_file(rails_root + '/config/resque.yml')
uri = URI.parse($resque_config[rails_env])
Resque.redis = Redis.new(host: uri.host, port: uri.port, password: uri.password)
.
# unicorn.rb bootup file
preload_app true
before_fork do |server, worker|
Redis.current.quit
end
after_fork do |server, worker|
Redis.current.quit
end
.
Ich habe dies versucht (vereinfacht, Speichern der Konfig in einem globalen) und sogar hart codiert die Verbindungszeichenfolge in der after_fork Hook als 'Resque.redis =" redis: // user: [email protected]: 6379 "Aber leider kein Erfolg. Rescue-Mitarbeiter arbeiten, Rails Web App kann es nicht verwenden. Wenn ich den Port ändere, verfolgen die Mitarbeiter dies, die App nicht. –
Wenn Sie eine Rails-Konsole in Produktion starten, was ist die Ausgabe von 'Resque.redis'? –
Von der Konsole funktioniert alles genau wie erwartet, und Resque.redis.info (zum Beispiel) gibt Informationen vom Server zurück. Wenn ich ein ungültiges Passwort verwende, erhalte ich den Fehler "password is wrong" (falsches Passwort), so dass ich weiß, dass es korrekt auf der Konsole verbunden ist. Selbst das Ausführen von 'Resque.redis.quit', gefolgt von demselben 'Resque.redis =" url "' - Befehl, funktioniert von der Konsole aus. –