🎉
Renderで動いているRailsでrake taskを定期実行したい
RenderでRailsのrake taskを定期実行をしたく、その時の実装メモ。(ちなみにDockerを使ってます)
Railsのrake taskをRender.comで定期実行する
順番に書いていく
ヘッダーメニューから「Cron Job」を選択する
『New +』を押下する。
『Cron Job』を押下する。
Cron Jobを設定したいリポジトリを選択する
以下の項目を設定する
- 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が定期実行されるようになるはず。
Discussion