Domanda

sono riuscito a impostare i miei lavoratori e hanno usato per eseguire senza problemi (in fase di sviluppo), ma ora non sia in produzione o di sviluppo (sto cercando di indovinare dopo il passaggio da sqlite3 a PostgreSQL).

Quando eseguo un comando rastrello per eseguire i lavoratori con rake resque:work QUEUE=* ricevo il seguente errore e lo stack trace:

getaddrinfo: nodename nor servname provided, or not known

ottengo i seguenti errori durante l'esecuzione heroku rake resque:work QUEUE=* nella console per test di lavoratori in attesa in coda.

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

E per il mio operaio 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)) 

Perché ricevo diversi errori in ambienti diversi? I miei file di inizializzazione assomigliano:

Dovrei aggiungere specifiche ENV qui?

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

Il mio ambienti / production.rb file non ha alcun riferimento a Redis e la mia ambienti / development.rb file ha questo per la configurazione Redis:

ENV["REDISTOGO_URL"] = 'redis://username:password@my.host:6789' 
È stato utile?

Soluzione

L'aggiunta dei seguenti alla mia Rakefile risolto un problema simile per me:

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

Questa ricollega PostgreSQL prima Resque fork suo processo per creare un lavoratore.

Altri suggerimenti

Sembra che la vostra applicazione non può connettersi al server di Redis. Hai fornito dettagli di connessione validi per ambiente di produzione? voi è Redis server disponibile? Non è forse dietro firewall sono alcune reti private?

Penso che potrebbe essere lo stesso problema con te la produzione di server PostgreSQL.

Ho cambiato le inizializzatori al seguente ed ora funziona su localhost, in modo @mirtinciu aveva ragione la connessione al server. Ancora bisogno di capire ciò che è sbagliato sul server di produzione.

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

Credo che sia un duplicato ed è risolto ripristinando la connessione ActiveRecord: Rails lavoratori Resque falliscono con PGError: server ha chiuso la connessione inaspettatamente

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top