Ruby2.2を使用したRails4.2.1アプリがあります。Whenever Gemを使用して、コードベースからElasticBeanstalkのcronタスクを更新しようとしています。AWSのいくつかのリソースに従って、.ebextensions
フォルダーにファイルを追加し、シェルファイルを介してEBのデプロイ後フックを使用できます。ここにいくつかのリソースがあります:
ブログ記事に続いて、以下のファイルを追加し、.ebextensions
フォルダー内のファイルに関するgitignore行のコメントを解除して、アプリをデプロイしました。残念ながら、私はどんな変化も見ることができました。ログファイル(log/eb-tools.log
、log/cron
など)を確認し、作成したシェルファイルのすべてのログファイルをいつでも取得しました。でも運がない。
commands:
create-post-dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_update_cron.sh"
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
# Using similar syntax as the appdeploy pre hooks that is managed by AWS
# Loading environment data
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_APP_USER=$(/opt/elasticbeanstalk/bin/get-config container -k app_user)
EB_APP_CURRENT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)
EB_APP_PIDS_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_pid_dir)
# Setting up correct environment and ruby version so that bundle can load all gems
. $EB_SUPPORT_DIR/envvars
. $EB_SCRIPT_DIR/use-app-ruby.sh
# Now we can do the actual restart of the worker. Make sure to have double quotes when using env vars in the command.
su -c "cd $EB_APP_CURRENT_DIR; bundle exec whenever --update-cron --set='environment=$RACK_ENV'" - $EB_APP_USER
このシェルファイルが呼び出されていることを確認するにはどうすればよいですか?毎回新しいデプロイメントなしでテストできますか?また、いつでも宝石が最良の選択肢ではない場合、私は他の選択肢を受け入れます。私は主に、cronタスクをコードで管理してバージョン管理できるようにしたいと考えています。
前もって感謝します!
更新:
.ebextensions
フォルダにタイプがあり、追加されませんでした。それが修正された後、エラーメッセージを読み、Whenevergemを使用してcrontabを更新するcronスクリプトを作成することができました。.ebextensions
フォルダ名のタイプミスを修正した後、これを理解することができました。その後、スクリプトがコンパイルされ、ログメッセージが表示され始めました。ログメッセージを読んだ後、次の設定スクリプト(.ebextensions/01_cron.config
)を思いつきました。
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/01_cron.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
# Using similar syntax as the appdeploy pre hooks that is managed by AWS
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 $EB_DEPLOY_DIR
su -c "bundle exec whenever --update-cron"
su -c "crontab -l"
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加