前提
記事を書いている私は現役のエンジニアではなくエンジニアを目指して学習中の者です。
よって、気をつけてはいますが記述内容には誤った内容が含まれている危険性があります。
その為この記事は参考程度に読んで頂き詳しい内容は公式の記述を参考にすることをおすすめします。
この記事で実装すること
個人開発のアプリでgem:wheneverを使用して定期処理を実行しようとしたが動作しなくて困ったのでその時の対処をまとめました。
具体的にはHerokuではgem:wheneverはサポートされていないらしいのでHerokuのアドオンであるschedulerを使用して定期処理を実行させるように変更しました。
使用技術
Ruby 3.1.2
Rails 6.1.6
Heroku
実装手順
1, 定期実行させたい処理をrakeタスクとして作成する
gemのwheneverでもHerokuのschedulerでもまずは実行するrakeタスクを作成する必要があります。
rakeタスクは以下のコマンドを実行することで作成できます。
task名は任意ですが名前から処理が想像しやすいものにします。
$ rails g task scheduler_test
2, 作成されたrakeタスクを編集する
コマンドによってlibディレクトリのtasksディレクトリの中にscheduler_test.rakeファイルが作成されていることが確認できます。
namespace :scheduler_test do
end
このファイルに実行させたい処理を書いていきます。
ここではおはようメッセージを表示するタスクを定義してみます。
namespace :scheduler_test do
#descにはtaskの説明を書きます
desc "毎日おはようメッセージを表示する"
#taskにはtask名を書きます
task good_morning: :environment do
puts "おはよう!!"
end
end
これでrakeタスクの作成は完了です。
試しに以下のコマンドを実行してtaskの一覧に作成したタスク名があることを確認します。
$ rails s
$ rake -T
表示されたタスク一覧の中に先ほど作成されたタスク名と説明があることがわかります。
rake scheduler_test:good_morning # 毎日おはようメッセージを表示する
ちなみに、コマンドを打てばタスクが実行され"おはよう!!"が表示されます。
$ rake scheduler_test:good_morning
おはよう!!
3, Herokuのschedulerを使用して定期実行させる
Herokuアプリにログインして対象のアプリのResourcesタブを開きAdd-onsの検索バーでHeroku schedulerと打ち込みます。
下の画面が表示されるのでSubmit Order Formを押します。
これで追加が完了しました。
次に以下のコマンドを実行してスケジュール設定画面に移動します。
$ heroku addons:open scheduler
最後に実行させたい時間帯と実行させたいタスクのコマンドを打ち込めば設定の完了です。
時刻がUTC基準になっていることに注意してください。
以上でHeroku上で定期処理を実行するための説明を終わります。思っていたより簡単に実装ができました。
初学者なので何か間違い等を見つけましたらご指摘頂けると助かります!