私はHerokuで本当に奇妙な問題を抱えています。HerokuでのResqueを使ったバックグラウンドジョブ
私のアプリには、ActiveJobをバックグラウンドで実行するように設定したいくつかの外部API呼び出しとメーラがあります。ヘロクで私は2人の従業員を雇っています。私は以下のスニペットに従って、仕事のためにResque/Redisコンボを使用しています。私はHerokuでRedis Cloudアドオンを使用しています。
コンフィグ/セットアップ
Procfile
web: bundle exec puma -C config/puma.rb
resque: env TERM_CHILD=1 QUEUE=* bundle exec rake rescue:work
のlib /タスク/ resque.rake
require "resque/tasks"
require "resque/scheduler/tasks"
task "resque:setup": :environment do
Resque.before_fork = proc { ActiveRecord::Base.connection.disconnect! }
Resque.after_fork = proc { ActiveRecord::Base.establish_connection }
end
設定/初期化子/ active_job.rb
Rails.application.config.active_job.queue_adapter = :resque
設定/初期化子/ redis.rb
if ENV["REDISCLOUD_URL"]
$redis = Redis.new(url: ENV["REDISCLOUD_URL"])
end
設定/初期化子/ resque.rb
if Rails.env.production?
uri = URI.parse ENV["REDISCLOUD_URL"]
Resque.redis = Redis.new(host: uri.host, port: uri.port,
password: uri.password)
else
Resque.redis = "localhost:6379"
end
問題
私が午前問題があるときユーザーがブラウザでアプリを使用している(つまり、ウェブワーカーとのインタフェイス) Active Jobジョブの1つをトリガーするアクションを形成し、ワーカーではなく、web
ワーカーを使用してジョブが「インライン」で実行されます。 Herokuアプリケーションコンソール(heroku run rails console
を実行して開く)でジョブをキューに入れる特定のモデルメソッドを実行すると、Redisにジョブが追加され、期待通りにresque
ワーカーを使用して実行されます。
一方向が正常に動作し、もう一方が正常に動作しないのはなぜですか?私はトピックに関するほぼすべてのチュートリアル/ SOの質問を見てきたので、仕事を実行するのに役立つが、適切な作業者はすばらしいだろう。
ありがとうございます!