1

我有一个在 Elastic Beanstalk 环境中运行的 Laravel 应用程序。无法访问数据库、S3 和 SQS 变量我确实在 ebxtensions 上编写了一个配置,以便在部署期间使用echoOn a .sh hook 文件在 post-deploy 上复制一些环境变量,如下所示:

echo -e "AWS_BUCKET=$AWS_BUCKET" >> /var/app/current/.env

.env 文件已正确更新,但是在完成后运行的另一个 .sh 挂钩具有以下代码:

php /var/app/current/artisan config:cache

这会将缓存的配置文件保存为 .env 文件尚未更新。

现在 config:cache 命令需要在部署后手动运行,但我真的想让这个过程全部自动化。

任何想法为什么会发生这种情况?

4

1 回答 1

4

EB deploy的过程很有意思,看看/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 中使用这个 post-hook:

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
于 2018-08-02T14:47:15.580 回答