Docker on Renderで動いているRailsでrake taskを定期実行したい | Tomoyuki Kato's Blog

Docker on Renderで動いているRailsでrake taskを定期実行したい

Engineering
この記事を書いた人

PharmaXというオンライン薬局のスタートアップで薬剤師・エンジニアとして働いています。Rails・React・TypeScriptなどを書きます。英語が得意でTOEIC900点・通訳案内士資格取得。主に薬剤師の働き方やプログラミング、英語学習について書きます。当サイトではアフィリエイトプログラムを利用して商品を紹介しています。
>> 詳しいプロフィール

Tomoyuki Katoをフォローする

 

RenderでRailsのrake taskを定期実行をしたく、それの設定をしてみたので、その時のメモ書き。

 

Railsのrake taskをRender.comで定期実行する設定

 

では設定していく。

 

ヘッダーメニューから「Cron Job」を選択する

『New +』を押下する。

 

『Cron Job』を押下する。

 

Cron Jobを設定したいリポジトリを選択する

Cron Jobを設定したいリポジトリを選択肢し、『Connect』を押下する。

 

以下の項目を設定する

  • Name: rake taskの名前
  • Region: Singapore
  • Branch: cron jobを使うブランチを選択
  • Runtime: 今回はDockerを選択
  • Schedule:タスクの実行時間をcron形式で入力、

 

ちなみにRenderはデフォルトでUTC(協定世界時)を使用しているため、日本時間に変更する必要がある。

 

具体的にはUTC+9時間に設定すれば良い。

今回は毎日7時、11時、15時、19時に定期実行したかったので、Scheduleには0 22,2,6,10 * * *と設定した。

 

Docker Commandを設定する

次にrake taskの実行コマンドが書かれたshファイルのパスをDocker Commandに設定する。

hogehoge_task.shファイルを作って、以下のような記述をすればOK。

#!/bin/sh
set -e

bundle exec rake tasks:execute # 定期実行したいタスクを起動するコマンドを記述する

 

 

Dockerfileの修正

↑で作ったhogehoge_task.shファイルをDockerfileに記述する。

これをやっておかないとCron jobが定期実行されないので注意。

 

FROM ruby:3.1.3

ENV APP_ROOT /myapp

RUN mkdir $APP_ROOT

WORKDIR $APP_ROOT

COPY docker/deploy/production/entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh

COPY Gemfile $APP_ROOT/Gemfile
COPY Gemfile.lock $APP_ROOT/Gemfile.lock

RUN apt-get update -qq \
    && apt-get install -y build-essential libpq-dev \
    && bundle config set --local without 'development test' \
    && bundle install

COPY . $APP_ROOT
COPY hogehoge_task.sh $APP_ROOT/hogehoge_task.sh
RUN chmod +x $APP_ROOT/hogehoge_task.sh

ENTRYPOINT ["entrypoint.sh"]

EXPOSE 8080

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

 

Cron jobを作成する

『Create Cron Job』を押下する。

 

これでrake taskが定期実行されるようになるはず。

タイトルとURLをコピーしました