質問

私は自分の労働者をセットアップすることができましたが、彼らは(開発中)問題なく実行していましたが、現在は生産も開発もしていません(SQLite3からPostgreSQLに変更した後に推測しています)。

レーキコマンドを実行して労働者を実行するとき rake resque:work QUEUE=* 次のエラーとスタックトレースが表示されます。

getaddrinfo: nodename nor servname provided, or not known

実行中に次のエラーが発生します heroku rake resque:work QUEUE=* コンソールで、キュー内の保留中の労働者をテストします。

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

そして私の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)) 

さまざまな環境で異なるエラーが発生するのはなぜですか?私の初期化ファイルは次のように見えます:

ここにENV仕様を追加する必要がありますか?

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

じぶんの 環境/production.rb ファイルには、Redisと私の言及がありません 環境/開発。RB ファイルには、Redisセットアップ用にこれがあります。

ENV["REDISTOGO_URL"] = 'redis://username:password@my.host:6789' 
役に立ちましたか?

解決

私のrakefileに以下を追加すると、私にとっても同様の問題が修正されました。

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

これにより、Resqueがワーカーを作成するプロセスが分岐する前に、PostgreSQLが再接続されます。

他のヒント

アプリはRedisサーバーに接続できないようです。生産環境に有効な接続の詳細を提供しましたか? Redisサーバーは利用できますか?ファイアウォールの背後にはプライベートネットワークがありますか?

生産PostgreSQL Serverと同じ問題かもしれないと思います。

初期剤を次のように変更しましたが、現在はLocalHostで動作するため、 @Mirtinciuはサーバー接続について正しかったです。生産サーバーで何が悪いのかをまだ把握する必要があります。

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

私はそれが複製であり、ActiverCord接続を復元することで解決されると思います。Rails Resque Workersがpgerrorで失敗:サーバーは予期せず接続を閉じます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top