mancanza operaio Resque con il server PostgreSQL
-
26-10-2019 - |
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'
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