Pregunta

He logrado configurar a mis trabajadores y solían ejecutar sin problemas (en desarrollo), pero ahora no lo hacen en producción o desarrollo (supongo que después de cambiar de SQLITE3 a Postgresql).

Cuando ejecuto un comando de rastrillo para ejecutar a los trabajadores con rake resque:work QUEUE=* Recibo el siguiente error y traza de pila:

getaddrinfo: nodename nor servname provided, or not known

Recibo los siguientes errores al ejecutar heroku rake resque:work QUEUE=* en la consola para probar a los trabajadores pendientes en la cola.

Class         SentimentJob
Arguments     [4, 5, 6]
Exception     ActiveRecord::StatementInvalid
Error         PGError: server closed the connection unexpectedly This probably means
              the server terminated abnormally before or while processing the request.
              : SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc,
              a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid =
              d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = '"taggings"'::regclass
              AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum

Y para mi trabajador de Facebook:

Class         FBConnectionsJob
Arguments     1
Exception     OpenSSL::SSL::SSLError
Error         SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B:
              certificate verify failed

Class         FBConnectionsJob
Arguments     1
Exception     ActiveRecord::StatementInvalid
Error         PGError: server closed the connection unexpectedly This probably means
              the server terminated abnormally before or while processing the request.
              : SELECT tablename FROM pg_tables WHERE schemaname = ANY
              (current_schemas(false)) 

¿Por qué obtengo diferentes errores en diferentes entornos? Mis archivos inicializadores se ven como:

¿Debo agregar especificaciones Env aquí?

Resque.rb

uri = URI.parse(ENV["REDISTOGO_URL"])
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file }

Redis.rb

uri = URI.parse(ENV["REDISTOGO_URL"])
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Resque.redis = REDIS

Mi entornos/producción.RB El archivo no tiene referencia a Redis y mi entornos/desarrollo.rb El archivo tiene esto para la configuración de Redis:

ENV["REDISTOGO_URL"] = 'redis://username:password@my.host:6789' 
¿Fue útil?

Solución

Agregar lo siguiente a mi filtro de rastrillo solucionó un problema similar para mí:

task "resque:setup" => :environment do
  Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection }
end

Esto reconecta PostgreSQL antes de que Resque bifle en su proceso para crear un trabajador.

Otros consejos

Parece que su aplicación no puede conectarse al servidor Redis. ¿Proporcionó detalles de conexión válidos para el entorno de producción? ¿Está disponible el servidor Redis? ¿No es detrás del firewall hay alguna red privada?

Creo que podría ser el mismo problema con el servidor PostgreSQL de producción.

He cambiado los inicializadores a lo siguiente y ahora funciona en localhost, por lo que @Mirtinciu tenía razón sobre la conexión del servidor. Todavía necesita averiguar qué está mal en el servidor de producción.

if Rails.env.development?
  uri = URI.parse(ENV["REDISTOGO_URL"])
  Resque.redis = Redis.new(:host => 'localhost', :port => '6379')
else
  uri = URI.parse(ENV["REDISTOGO_URL"])
  Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
end

Creo que es un duplicado y se resuelve restaurando la conexión Activerecord:Los trabajadores de Rails resque fallan con PGERROR: el servidor cerró la conexión inesperadamente

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top