19

Herokuで遅延ジョブを無料で実行することは可能ですか?

delayed_job_active_recordHerokuで使用しようとしています。ただし、これにはaが必要であり、worker dynoこのdynoをフルタイムでオンにするとコストがかかります。

Unicornを使用して、Herokuワーカーの代わりにそのワーカーに遅延ジョブを実行させると、すべてのジョブを正常に実行しながら、コストがかからないと思いました。ただし、ユニコーンの労働者は自動的に「作業」を開始しないようです。

Procfileには次のものがあります。

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
worker: bundle exec rake jobs:work

そして私のunicorn.rbの次の

worker_processes 3
timeout 30
preload_app true

before_fork do |server, worker|
  # Replace with MongoDB or whatever
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.connection.disconnect!
    Rails.logger.info('Disconnected from ActiveRecord')
  end

  # If you are using Redis but not Resque, change this
  if defined?(Resque)
    Resque.redis.quit
    Rails.logger.info('Disconnected from Redis')
  end

  sleep 1
end

after_fork do |server, worker|
  # Replace with MongoDB or whatever
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
    Rails.logger.info('Connected to ActiveRecord')
  end

  # If you are using Redis but not Resque, change this
  if defined?(Resque)
    Resque.redis = ENV['REDIS_URI']
    Rails.logger.info('Connected to Redis')
  end
end

遅延ジョブは、Herokuワーカーを0から1にスケーリングした場合にのみ機能するようです。繰り返しますが、Herokuワーカーの代わりにUnicornワーカーを使用して、遅延ジョブを実行することはできませんか?

worklessHerokuで遅延ジョブを無料で実行するようなgemを使用する必要がありますか?(参照

4

5 に答える 5

15

そのようにプロセスを分割すると問題が発生する可能性があります - あなたの最善の策は、それを「無料」で取得しようとするのではなく、実行するジョブがあるときにワーカーを起動するhttp://hirefireapp.com/のようなものを使用して、コストを大幅に削減することですワーカーを 24 時間 365 日稼働させるのではなく、

また、Heroku は「Web」プロセスのみを自動起動することに注意してください。他の名前付きプロセスの起動は手動タスクです。

于 2013-03-04T08:39:45.353 に答える
5

理想的には、これを無料で入手する直接的な方法はありませんが、無料のバックグラウンド ジョブを楽しむための回避策はたくさんあります。そのうちの 1 つはhttp://nofail.de/2011/07/heroku-cedar-background-jobs-for-free/です。

また、バックグラウンド ジョブに最適な resque を使用する場合は、nano バージョンで無料で提供される redis が必要です => https://addons.heroku.com/redistogohttps://devcenter.heroku.com/articles/queuing-ruby-resque

簡単な解決策は、ワーカー用に 1 つの dyno を購入することですが、Web dyno は無料です。

さらに助けが必要な場合は、私に任せてください。

ありがとう

于 2013-03-04T08:14:09.357 に答える
2

Workless gem の使用を検討してください: https://github.com/lostboy/workless

于 2014-05-12T03:49:18.263 に答える
1

Web ワーカーが 1 つしかない場合、Heroku は非アクティブ状態が 1 時間続くとそのワーカーをスリープさせます。

また、Heroku は少なくとも 1 日に 1 回、すべての dyno を再起動します。

これにより、Ruby 内でスケジューラーを実行することが困難になります。少なくとも永続ストレージ (データベースなど) を使用する必要があります。

于 2013-11-15T21:00:13.027 に答える