Resque Worker fehl
-
26-10-2019 - |
Frage
Ich habe es geschafft, meine Arbeitnehmer einzurichten und sie haben früher ohne Probleme ausgeführt (in der Entwicklung), aber jetzt weder in der Produktion noch in der Entwicklung (ich vermute, nachdem sie von SQLite3 zu PostgreSQL gewechselt worden sind).
Wenn ich einen Rake -Befehl ausführe, um die Arbeiter mitzuführen rake resque:work QUEUE=*
Ich bekomme den folgenden Fehler und Stapelverfolgung:
getaddrinfo: nodename nor servname provided, or not known
Ich bekomme die folgenden Fehler beim Laufen heroku rake resque:work QUEUE=*
in der Konsole, um anhängige Arbeiter in der Warteschlange zu testen.
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
Und für meinen Facebook -Mitarbeiter:
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))
Warum bekomme ich in verschiedenen Umgebungen unterschiedliche Fehler? Meine Initialisierungsdateien sehen aus:
Soll ich hier Env -Spezifikationen hinzufügen?
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
Mein Umgebungen/Produktion.RB Datei hat keinen Bezug auf Redis und meine Umgebungen/Entwicklung.RB Die Datei hat dies für Redis -Setup:
ENV["REDISTOGO_URL"] = 'redis://username:password@my.host:6789'
Lösung
Das Hinzufügen von Folgendes zu meinem Rakefile hat ein ähnliches Problem für mich behoben:
task "resque:setup" => :environment do
Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection }
end
Dies verbindet PostgreSQL, bevor Resque seinen Prozess zur Schaffung eines Arbeiters verabschiedet.
Andere Tipps
Es sieht so aus, als ob Ihre App keine Verbindung zum REDIS -Server herstellen kann. Haben Sie gültige Verbindungsdetails für die Produktionsumgebung angegeben? Sind Sie Redis Server verfügbar? Ist es nicht hinter der Firewall, die ein privates Netzwerk ist?
Ich denke, es ist möglicherweise das gleiche Problem mit Ihrem ProduktionspostgreSQL Server.
Ich habe die Initialisierer in Folgendes geändert und es funktioniert jetzt bei Localhost, also hatte @mirtinciu Recht mit der Serververbindung. Sie müssen noch herausfinden, was auf dem Produktionsserver falsch ist.
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
Ich denke, es ist ein Duplikat und wird durch Wiederherstellung der ActiveCord -Verbindung gelöst:Rails Resque -Mitarbeiter fehlen mit PGerRor: Server schloss die Verbindung unerwartet ab