Mam nieoczekiwane i znaczące problemy z próbą pobrania aplikacji Railsowej działającej pod Unicorn, aby połączyć się z chronionym hasłem serwerem Redis.Resque nie odbiera ustawień konfiguracyjnych Redis
Przy użyciu linii poleceń mogę wydawać polecenia przez Resque.redis. Wygląda jednak na to, że moja konfiguracja jest tracona, gdy rozwidla się pod Unicornem.
Używanie serwera Redis bez ochrony hasłem Just Works. Jednak zamierzam uruchamiać pracowników na innych serwerach niż serwer Redis, więc potrzebuję tego do ochrony hasłem.
Udało mi się również użyć hasła chronionego (przy użyciu tej samej techniki), ale używając Pasażera zamiast Jednorożca.
Mam następującą konfigurację:
# 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
.
Próbowałem tego (uproszczenie, przechowywanie konfiguracji w globalnej), a nawet zakodowałem ciąg połączenia w haku after_fork jako 'Resque.redis =" redis: // user: [email protected]: 6379 "' ale niestety, bez powodzenia. Pracownicy Resque pracują, aplikacja internetowa Railsy nie używają jej. Jeśli zmienię port, pracownicy śledzą to, aplikacja nie. –
Jeśli uruchomisz konsolę szynową podczas produkcji, jaki jest wynik działania 'Resque.redis'? –
Z konsoli wszystko działa zgodnie z oczekiwaniami, a Resque.redis.info (na przykład) zwraca informacje z serwera. Jeśli użyję nieprawidłowego hasła, otrzymam błąd stylu "hasło jest złe", więc wiem, że poprawnie łączy się z konsolą. Nawet uruchomienie 'Resque.redis.quit', po którym następuje to samo polecenie' Resque.redis = "url" 'działa z poziomu konsoli. –