0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Heroku+Railsでバッチ処理を作成する

Posted at

目的

個人開発のRailsアプリで、1日1回メール配信を行うバッチ処理を作る必要があり、調べて実装した時の備忘録です。

メール配信はsidekiqで非同期処理させており、開発環境ではsidekiq-schedularで24時間周期で起動させていました。
しかし、本番環境で利用しているHeroku(無料枠)では、30分でWebサーバがIdleになるため、うまく動作しませんでした。このため本番環境ではHerokuのアドオン(Heroku-schedular)を使った構成にしています。

スモールスタート等でRails+Heroku構成を選択される方は多いと思いますので、参考になれば幸いです。

開発環境

  • Rails 6.0.3.3
  • Heroku FreeDyno

手順

手順はシンプルです。1はRails、2と3はHeroku側で行います。順を追って説明します。

  1. 実行したいタスクをrakeファイルに書く
  2. Heroku-schedularをアドオンする
  3. Heroku-schedularにスケジューラを設定する

1. 実行したいタスクをrakeファイルに書く

/lib/tasksの下にrakeファイルを作成してタスクを記述します。
rakeタスクの詳細についてはこちら

sample.rake
desc "This task is called by the Heroku scheduler add-on"
task :task_name ,[:arg_1] => :environment do
  # 処理を書く
end

:task_nameはタスクの名前です。タスクを実行する時に使います。:arg_1は引数で必要な場合はこの様に記載します。タスク内でDBにクエリを投げる時には=> :environmentも記載します。

rakeファイルを作成したら、consoleからrakeコマンドで動作確認します。

rake task_name

2. Heroku-schedularをアドオンする

HerokuコンソールのResourcesタブから、Add-onsメニューでHeroku Schedularを検索します。Heroku Schedularを選ぶとプランを選択画面がポップアップされます。Plan nameが「standard-free」になっていると思いますが、そのまま変えずにSubmit order formを押すとアドオンされます。

3. Heroku-schedularにスケジューラを設定する

アドオンが完了すると、HerokuコンソールのOverviewにあるInstalled add-onsにHeroku Schedularが追加されているので、選択すると、スケジューラ設定画面に遷移します。Add jobで新しいジョブスケジューリングを設定できます。Run Commandのところに定期実行するコマンド(rake task_name)を記載します。実行時間はUTCなので注意してください。

以上

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?