我在Elastic Beanstalk环境中运行了一个Laravel应用程序。
无法访问数据库,S3和SQS变量我在ebxtensions上编写了一个配置,以便在部署期间使用echo
在部署后的.sh钩子文件上复制.env文件中的一些环境变量:
echo -e "AWS_BUCKET=$AWS_BUCKET" >> /var/app/current/.env
.env文件已正确更新,但在此之后运行的另一个.sh挂钩具有以下代码:
php /var/app/current/artisan config:cache
这会保存缓存的配置文件,因为.env文件尚未更新。
现在需要在部署后手动运行config:cache命令,但我真的想让这个过程全部自动完成。
为什么会发生这种想法?
答案 0 :(得分:1)
EB部署过程非常有趣,请查看/var/log/eb-activity.log
++ /opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir
+ EB_APP_DEPLOY_DIR=/var/app/current
+ '[' -d /var/app/current ']'
+ mv /var/app/current /var/app/current.old
+ mv /var/app/ondeck /var/app/current
+ nohup rm -rf /var/app/current.old
因此,您的config:cache在以前的环境中运行,在部署后已删除。 您应该在.ebextensions / 01-post.config中使用此挂机:
files:
/opt/elasticbeanstalk/hooks/appdeploy/post/01_create_cache.sh:
mode: "000755"
owner: root
group: root
content: |
php /var/app/current/artisan config:cache >>/var/log/artisan_test.log
但是请小心使用!它仅从.env中获取变量,而不从EB VARIABLES中获取 ! 正确的方法是将所有变量收集到.env,然后生成配置缓存。
files:
/opt/elasticbeanstalk/hooks/appdeploy/post/01_create_cache.sh:
mode: "000755"
owner: root
group: root
content: |
source /opt/elasticbeanstalk/support/envvars && /usr/bin/php /var/www/html/artisan config:cache >>/var/log/artisan_test.log