5
1

More than 1 year has passed since last update.

[Rails・Heroku]HerokuでWheneverが機能しない場合の対処

Posted at

前提

記事を書いている私は現役のエンジニアではなくエンジニアを目指して学習中の者です。
よって、気をつけてはいますが記述内容には誤った内容が含まれている危険性があります。
その為この記事は参考程度に読んで頂き詳しい内容は公式の記述を参考にすることをおすすめします。

この記事で実装すること

個人開発のアプリで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と打ち込みます。
Image from Gyazo
下の画面が表示されるのでSubmit Order Formを押します。
Image from Gyazo
これで追加が完了しました。

次に以下のコマンドを実行してスケジュール設定画面に移動します。

$ heroku addons:open scheduler

画面に移動したらCreate jobを選択します。
Image from Gyazo

最後に実行させたい時間帯と実行させたいタスクのコマンドを打ち込めば設定の完了です。
時刻がUTC基準になっていることに注意してください。
Image from Gyazo

以上でHeroku上で定期処理を実行するための説明を終わります。思っていたより簡単に実装ができました。
初学者なので何か間違い等を見つけましたらご指摘頂けると助かります!

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1