-1

Heroku でデプロイされた Rails アプリで、 Clockwork gemを使用してジョブをスケジュールします。

clock.rbなじみのない方のために説明すると、基本的にアプリのルートにあるファイルから読み取ります。

# config.rb

# Schedule every Monday @ 13:00 UTC
every(1.week, "some description", at: "Monday 13:00", tz: "UTC"){
  `rake clock_tasks:my_task`
}

...そして、クロック プロセスを実行する専用の Dyno があります。

# Procfile
...
clock: bundle exec clockwork clock.rb
...

クロック ファイルをハードコーディングしたくない場合はどうすればよいでしょうか。clock.rbアプリの起動時に ERB を使用して動的に生成できるようにしたいと考えています。これにより、環境構成などに基づいて特定のタスクをスケジュールするかどうかを柔軟に設定できます...

  1. Heroku ではclock.rb、初期化ステップでファイルを生成して書き込むことができるように、いつでもローカル ファイルシステムにファイルを「書き込む」ことができますか?

  2. bundle execファイルを作成した後まで、コマンドで dyno を開始する実行を遅らせる方法はありclock.rbますか? bundle exec clockwork...偽の/空のファイルから始めて、初期化中に新しいファイルを作成することもできますが、コマンドを再起動してクロックが再びそれを取得する方法が必要です。

他の創造的な解決策は高く評価されます。

ありがとう!

4

1 に答える 1

1

あなたconfig.rbはただのルビーです。問題を解決するにはERB、プレーンな Ruby と変数を組み合わせるだけで十分です。ENV

# Schedule every `ENV['schedule_time']` (with fallback if empty)
schedule_time = ENV['schedule_time'].presence || 'Monday 13:00'
every(1.week, "some description", at: schedule_time, tz: "UTC") {
  `rake clock_tasks:my_task`
}

または、次のように書くこともできます。

if ENV[`foo`]
  # config bar
else
  # config baz
end

Heroku で環境変数を設定および読み取る方法については、Configuration および Config Varsを参照してください。

于 2015-10-11T06:33:38.363 に答える