3

私はherokuでresque/redisを使用して、バックグラウンドジョブとしてメールを送信しています。私が送信する最初の電子メールでは正常に機能しますが、その後エラーが発生します:(ActiveRecord :: StatementInvalid:PG :: Error:SSLエラー:復号化に失敗したか、レコードが不良です:).. ..

イニシャライザーに追加するという他の質問/回答を見てきました:

Resque.after_fork = Proc.new {ActiveRecord :: Base.establish_connection} OR

Resque.before_fork = Proc.new {ActiveRecord :: Base.establish_connection}

しかし、私はこれを実行しました(そして、私が考えることができる他のことを試しました)、それでも同じエラーが発生します。before_forkのみとafter_forkのみを使用してコードを実行しましたが、役に立ちませんでした。

また、APN_senderを使用してアップルプッシュ通知を送信しています。これらのワーカーには問題はありませんでした(ただし、Resqueワーカーではなく、デフォルトのHerokuワーカーを呼び出しています)。

これが私の関連ファイルです、助けてください!これは私の最初のSOの質問でもあります。完全に行われなかった場合はお詫びします。

#config/resque.rb
after_fork do |server, worker, resque|
   logger.info("Got to after_fork in resque.rb config file")
defined?(ActiveRecord::Base) and
   ActiveRecord::Base.establish_connection
end

--------------------

#config/initializers/resque.rb
require 'resque'
require 'resque/server'

heroku_environments = ["staging", "production"]
rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/../..'
rails_env = ENV['RAILS_ENV'] || 'development'

#confusing wording..  determines whether or not we are in Production, tested and working
unless heroku_environments.include?(rails_env)
   resque_config = YAML.load_file(rails_root + '/config/resque.yml')
   Resque.redis = resque_config[rails_env]
else
   uri = URI.parse(ENV["REDISTOGO_URL"] || "redis://localhost:6379/")
   Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
end

----------------------

#resque.rake
require 'resque/tasks'

task "resque:setup" => :environment do
  ENV['QUEUE'] = '*'
  Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }
  Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection }
end

task "apn:setup" => :environment do
  ENV['QUEUE'] = '*'
end

desc "Alias for resque:work (To run workers on Heroku)"
task "jobs:work" => "resque:work"

desc "Alias for apn:work (To run workers on Heroku)"
task "jobs:work" => "apn:work"

-----------------------

#Sending the email
@event.guests.each do |g|
    Resque.enqueue(MailerCallback, "Notifier", :time_change, @event.id, g.id)
end

Heroku ps:scaleコマンドから1つのHerokuワーカーと1つのResqueワーカーを実行しています。私が言ったように、最初の電子メールはエラーなしで送信され、その後のすべての電子メールは上記のエラーを受け取ります。

前もって感謝します!マイク

4

1 に答える 1

0

OK、それでこれを理解できませんでした...

遅延ジョブに切り替えて、それははるかにうまく機能しています。apn_senderでプッシュ通知を送信できなくなったことに少しイライラしましたが、apn_on_railsは正常に機能しています。

奇妙な問題、まだ好奇心が強い...

于 2012-10-15T21:10:11.320 に答える