Amazoncontainer_commands
のドキュメントによると:
これらは、アプリケーションと Web サーバーがセットアップされ、アプリケーション バージョンのファイルが抽出された後、アプリケーション バージョンがデプロイされる前に実行されます。
(私のものを強調)
これは、コマンド/var/app/current
として設定している時点で、まだ以前のバージョンを指していることを意味します。cwd
ただし、デフォルトでは、再びドキュメントから、次のようになりcwd
ます。
解凍されたアプリケーションのディレクトリです。
delayed_job
これは、抽出されたばかりの (まだデプロイされていない) アプリのディレクトリから実行する場合は、オーバーライドせずcwd
に、デプロイしようとしているアプリのdelayed_jobを開始する必要があることを意味します。
参照: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-container_commands
アップデート:
私は今これを自分で設定しましたが、標準を介してそれを行うには制限があることがわかりましたcontainer_commands
-基本的にdelayed_jobは、まだ/var/app/ondeck
ディレクトリにある間に開始されます。通常はこれで問題ありませんが、一部のジョブで問題が発生しました。これは、アプリが/var/app/current
.
アプリサーバーが再起動された後に実行されるスクリプトを追加できるという、文書化されていない (警告!) アプローチを見つけました (そして、新しいデプロイは にあります/var/app/current
)。
/opt/elasticbeanstalk/hooks/appdeploy/post
基本的に、Elastic Beanstalk は、ウェブサーバーの再起動後にスクリプトを実行します。つまり、このディレクトリにシェル スクリプトをドロップすると、シェル スクリプトが実行されます。
以下のようなシェルスクリプトを作成しました。
#!/usr/bin/env bash
. /opt/elasticbeanstalk/support/envvars
cd $EB_CONFIG_APP_CURRENT
su -c "RAILS_ENV=production script/delayed_job --pid-dir=$EB_CONFIG_APP_SUPPORT/pids restart" $EB_CONFIG_APP_USER
このスクリプトを S3 バケットにアップロードし、「パブリック」であることを確認しました。.ebextensions
次に、ディレクトリ (例: )でオプション スクリプトを使用して、99delayed_job.config
このスクリプトをアプリのデプロイの一部としてデプロイできます。ただし、post
ディレクトリが存在しない可能性があることに注意してください。
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh":
mode: "000755"
owner: root
group: root
source: http://YOUR_BUCKET.s3.amazonaws.com/99_restart_delayed_job.sh
展開すると、次のように表示されます/var/log/eb-tools.log
。
2013-05-16 01:20:53,759 [INFO] (6467 MainThread) [directoryHooksExecutor.py-29] [root directoryHooksExecutor info] Executing directory: /opt/elasticbeanstalk/hooks/appdeploy/post/
2013-05-16 01:20:53,760 [INFO] (6467 MainThread) [directoryHooksExecutor.py-29] [root directoryHooksExecutor info] Executing script: /opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh
2013-05-16 01:21:02,619 [INFO] (6467 MainThread) [directoryHooksExecutor.py-29] [root directoryHooksExecutor info] Output from script: delayed_job: trying to stop process with pid 6139...
delayed_job: process with pid 6139 successfully stopped.
2013-05-16 01:21:02,620 [INFO] (6467 MainThread) [directoryHooksExecutor.py-29] [root directoryHooksExecutor info] Script succeeded.
私が言ったように、この「投稿」ディレクトリに何かを入れることは文書化されていません - しかし、うまくいけば、ある時点で、Amazon が.options
デプロイ後にコマンドを実行するスクリプトに実際のサポートを追加することを願っています。