Ho problemi inaspettati e significativi nel tentativo di ottenere un'app Rails, in esecuzione con Unicorn, per connettersi a un server Redis protetto da password.Resque non sta recuperando Impostazioni di configurazione Redis
Utilizzando bundle exec rails c production
sulla riga di comando, è possibile inviare comandi tramite Resque.redis. Tuttavia, sembra che la mia configurazione si stia perdendo quando è forked sotto Unicorn.
Utilizzo di un server Redis protetto da password Funziona. Tuttavia, ho intenzione di eseguire lavoratori su altri server rispetto a dove risiede il server Redis, quindi ho bisogno che questo sia protetto da password.
Ho anche avuto successo nell'usare una password protetta (utilizzando la stessa tecnica) ma utilizzando Passeggero anziché Unicorno.
Ho la seguente configurazione:
# 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
.
Ho provato questo (semplificando, memorizzando la configurazione in un globale) e anche hardcoded la stringa di connessione nell'amo after_fork come 'Resque.redis =" redis: // user: [email protected]: 6379 "ma ahimè, nessun successo. Lavorare in resque, l'app web di Rails non riesce a usarlo. Se cambio la porta, i lavoratori la seguono, l'app no. –
Se si avvia una console di rotaia in produzione, qual è l'output di 'Resque.redis'? –
Dalla console, tutto funziona esattamente come previsto, e Resque.redis.info (per esempio) restituisce informazioni dal server. Se utilizzo una password non valida, ottengo un errore di stile "password errata", quindi so che si collega correttamente alla console. Anche l'esecuzione di 'Resque.redis.quit' seguita dallo stesso comando' Resque.redis = "url" 'funziona dalla console. –