web-dev-qa-db-ja.com

Herokuでのcronタスクの実行

HerokuはDelayedJobの実行に月額$ 15を請求し、cronタスクの実行に月額$ 3 /月を請求することを確認しました。それを完全にスキップして、自分のcronタスクを手動で実行することは可能ですか?それとも、彼らは私がcronタスクを実行していることをどういうわけか理解していますか?

25
Lance Pollard

「自分のcronタスクを手動で実行する」とはどういう意味か完全にはわかりません。特にcronの場合、サーバーであるため、制御できるcrontabにアクセスする必要があります。別の方法がある場合はおそらく問題ありませんが、Herokuで実行している場合、アプリは特定のサーバーに関連付けられておらず、サーバー実行間で変更します。

また、前回チェックしてから変更されていない限り、毎日のcronタスクを無料で実行できますが、1時間あたりの料金は月額3ドルです。

[〜#〜]編集[〜#〜]:はい、毎日のcronは無料です。 http://addons.heroku.com/ を参照してください。

24
Lucas Jones

Heroku gem をコンピューターにインストールすると、次のようにcronタスクを手動で実行できます。

$ heroku rake cron
(in /disk1/home/slugs/xxxxxx_aa515b2_6c4f/mnt)
Running cron at 2010/04/25 10:28:54...

これにより、Herokuの毎日/毎時のcronアドオンとまったく同じコードが実行されます。つまり、これが機能するには、アプリケーションにcronタスクを含むRakefileが必要です。次に例を示します。

desc "Runs cron maintenance tasks."
task :cron do
  puts "Running cron at #{Time.now.strftime('%Y/%m/%d %H:%M:%S')}..."
  # TODO: your cron code goes here
end

ここで、heroku rake cronコマンドを任意のUnixサーバーのcrontabに追加するか、LinuxまたはMac OSXを実行している場合はパーソナルコンピューターのcrontabに直接追加するだけで、スケジュールを設定できます。 Herokuアプリケーションのcronジョブは、料金を請求されることなく、自由に使用できます。

10
Arto Bendiken

はい、基本的に実行されているローカルサーバーでcronジョブを正常に使用しました

$ heroku rake <rake task>

必要な間隔で。私はアスペンと竹のスタックの両方で使用しました。

4
dsaronin

2020年の答えを更新する:

  1. Heroku Scheduler を使用できます。これは、Heroku独自のアドオンであり、1回限りのdynoを使用してコマンドをスケジュールできます(ジョブの実行時間に対してのみ料金を支払うようにします)。アドオン自体は無料ですが、実際にはcronを使用することはできませんが、毎日、1時間ごと、または10分ごとの単純な頻度で使用できます。また、ジョブがスケジュールされた時間に実行されるか、まったく実行されないという保証はありません。

  2. 他にも サードパーティのアドオン cron式を使用して1回限りのdynoを実行し、柔軟性を高め、Herokuスケジューラよりも復元力を高めることができます(適切な開示、私の会社はそのようなアドオンの作成者です-オン)。

  3. カスタムクロックプロセス( 詳細はこちらを参照 )を使用することもできます。これは、基本的に、1つのdynoがあるか、他のdynoで実行されるスポーンタスクを処理することを意味します。これは通常、前述のアドオンを使用するよりもコストがかかりますが、プロセスをよりきめ細かく制御でき、Herokuのみに依存しているため、より安定している可能性があります。

1
SNeumann

Railsアプリを実行していて、そのようにスケジューリングを設定している場合は、rufus-schedulerのようなgemをインストールすることもできます。これが何らかの理由で悪い習慣かどうかはわかりませんが、私が自分のアプリで何をしているのか、そしてそれはうまくいくようです。