Estoy teniendo problemas inesperados y significativos tratando de obtener una aplicación de Rails, ejecutándose en Unicorn, para conectarme a un servidor Redis protegido con contraseña.Resque no está recuperando la configuración de configuración de Redis
Utilizando bundle exec rails c production
en la línea de comandos, puedo emitir comandos a través de Resque.redis. Sin embargo, parece que mi configuración se pierde cuando se bifurca en Unicornio.
Uso de un servidor Redis sin contraseña Just Works. Sin embargo, tengo la intención de ejecutar los trabajadores en otros servidores que el servidor donde vive Redis, por lo que necesito que esto esté protegido por contraseña.
También he tenido éxito en el uso de una contraseña protegida (usando la misma técnica) pero usando Passenger en lugar de Unicorn.
que tienen la siguiente configuración:
# 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
.
He intentado esto (simplificar, almacenar la configuración en un global) e incluso he codificado la cadena de conexión en el hook after_fork como 'Resque.redis =" redis: // usuario: [email protected]: 6379 "' pero por desgracia, no hay éxito. Los trabajadores de Resque trabajan, la aplicación web Rails no puede usarlo. Si cambio el puerto, los trabajadores siguen esto, la aplicación no. –
Si inicia una consola de rieles en producción, ¿cuál es el resultado de 'Resque.redis'? –
Desde la consola, todo funciona exactamente como se esperaba, y Resque.redis.info (por ejemplo) devuelve información del servidor. Si utilizo una contraseña no válida, obtengo un error de "contraseña incorrecta", así sé que se está conectando correctamente en la consola. Incluso ejecutando 'Resque.redis.quit' seguido por el mismo comando' Resque.redis = "url" 'funciona desde la consola. –