私は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ワーカーを実行しています。私が言ったように、最初の電子メールはエラーなしで送信され、その後のすべての電子メールは上記のエラーを受け取ります。
前もって感謝します!マイク