ruby on rails - Resque, servidor Resque, en RedisToGo con Heroku
ruby-on-rails ruby-on-rails-3 (1)
Creo que su Procfile
tiene un error tipográfico. ¿Por qué tienes dos procesos web
? Me quedaría con uno y usar unicornio .
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
Cuando se usa unicornio con resque , debe definir la conexión resque redis cada vez que se forme el unicornio . Aquí están los archivos relevantes.
config / initializers / redis.rb
uri = URI.parse(ENV["REDIS_WORKER"])
REDIS_WORKER = Redis.new(host: uri.host, port: uri.port, password: uri.password)
config / initializers / resque.rb
Resque.redis = REDIS_WORKER
config / unicorn.rb
before_fork do |server, worker|
if defined?(Resque)
Resque.redis.quit
Rails.logger.info("Disconnected from Redis")
end
end
after_fork do |server, worker|
if defined?(Resque)
Resque.redis = REDIS_WORKER
Rails.logger.info("Connected to Redis")
end
end
Vea esta esencia para el unicornio completo.rb
He intentado obtener Resque (con el servidor de Resque) y RedisToGo trabajando en heroku (cedro) por un tiempo, pero sigo encontrando este error:
Redis::CannotConnectError (Error connecting to Redis on 127.0.0.1:6379 (ECONNREFUSED)):
Está funcionando localmente, y puedo acceder a redis sin problemas en la consola de Heroku para mi aplicación.
My Procfile tiene:
web: bundle exec thin start -p $PORT -e $RACK_ENV
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
resque: env TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10 bundle exec rake resque:work
Mi Gemfile tiene:
gem ''redis''
#Background queue
gem ''resque'', ''~> 1.22.0'', :require => "resque/server"
lib / tasks / resque.rake:
require ''resque/tasks''
task "resque:setup" => :environment do
ENV[''QUEUE''] = ''*''
end
desc "Alias for resque:work (To run workers on Heroku)"
task "jobs:work" => "resque:work"
routes.rb:
mount Resque::Server.new, :at => "/resque"
inicializadores: redis.rb:
uri = URI.parse(ENV["REDISTOGO_URL"])
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Resque.redis = REDIS
resque.rb:
Dir["#{Rails.root}/app/workers/*.rb"].each { |file| require file }
Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }
luego en mi directorio de aplicaciones / trabajadores tengo algo como myjob.rb
Siento que voy en círculos aquí, ¿alguna idea?