LoginSignup
10
7

More than 5 years have passed since last update.

AWS ElasticBeanstalk + RailsでCronを設定する

Last updated at Posted at 2016-04-19

環境

  • AWS ElasticBeanstalk + Ruby 2.2 Puma
  • Rails 4.2.5

背景

AWSのElasticBeanstalkでRailsアプリを動かしており、サイトマップの更新をCronで定期的にできるようにしたいと思います。が、普通に設定してみたら、bundlerakeコマンドがうまく動かなくてハマってしまったので、残しておこうと思います。

Cron設定

/etc/cron.d 内のファイルが自動的に読み込まれてCronとして動作します。
ファイル名は何でもいいようなので、適当にsitemapとして、/etc/cron.d以下にファイルを設置します。

/etc/cron.d/sitemap

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
0 20 * * * root /var/script/sitemap.sh

次に、呼び出されるshファイルを設置しますが、普通にやるとうまく行きません。 bundle command not found , rake command not found等のエラーが発生します。パスが正しく通ってなさそうなので、色々パスをいじりましたが、rakeだけはうまく行きませんでした。

そこで、以下のようにして、ElasticBeanstalkの環境を引き継いてあげると、うまく行きます。

/var/script/sitemap.sh

#!/usr/bin/env bash
set -xe
EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir)
EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir)
EB_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)

. $EB_SUPPORT_DIR/envvars
. $EB_SCRIPT_DIR/use-app-ruby.sh

cd /var/app/current
RAILS_ENV=production bundle exec rake sitemap:refresh

あとはこれらの設定を.ebextensionsに書いてあげればOKです。
参考にしてみてください。

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