Question

J'ai réussi à mettre en place mes ouvriers et ils ont utilisé pour exécuter sans problème (en développement), mais maintenant, ils ne le font pas dans la production ou le développement (je devine après avoir changé de Sqlite3 à PostgreSQL).

Quand je lance une commande de râteau pour exécuter les travailleurs rake resque:work QUEUE=* je reçois l'erreur suivante et trace pile:

getaddrinfo: nodename nor servname provided, or not known

je reçois les erreurs suivantes lors de l'exécution heroku rake resque:work QUEUE=* dans la console pour tester les travailleurs en attente dans la file d'attente.

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

Et pour mon travailleur 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)) 

Pourquoi est-ce que je reçois des erreurs différentes dans des environnements différents? Mes fichiers initialiseur ressemblent:

Faut-je ajouter spécifications ENV ici?

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

Mon environnements / production.rb fichier n'a pas de référence à Redis et mon environnements / development.rb fichier a pour cette configuration Redis:

ENV["REDISTOGO_URL"] = 'redis://username:password@my.host:6789' 
Était-ce utile?

La solution

Ajout ce qui suit à mon Rakefile fixé un problème similaire pour moi:

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

reconnecte PostgreSQL avant Resque bifurque son processus de création d'un travailleur.

Autres conseils

Il semble que votre application ne peut pas se connecter au serveur Redis. Avez-vous fourni les détails de connexion valides pour l'environnement de production? vous est Redis serveur disponible? Est-il pas derrière le pare-feu sont un certain réseau privé?

Je pense qu'il pourrait être le même problème avec votre serveur PostgreSQL de production.

Je l'ai changé les initialiseurs à ce qui suit et il travaille maintenant sur localhost, alors @mirtinciu avait raison sur la connexion du serveur. Encore besoin de comprendre ce qui ne va pas sur le serveur de production.

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

Je pense qu'il est un double et il est résolu en rétablissant la connexion ActiveRecord: Rails travailleurs Resque échouent avec PGError: serveur fermé la connexion de façon inattendue

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top