Symfony 部署后运行Elastic Beanstalk命令
我在AWS上部署Symfony应用程序。我用弹性豆茎。 在部署过程之后,我想运行一些symfony命令:清除缓存、更新数据库 所以我创建了.ebextention,里面有.configSymfony 部署后运行Elastic Beanstalk命令,symfony,amazon-web-services,command,amazon-elastic-beanstalk,Symfony,Amazon Web Services,Command,Amazon Elastic Beanstalk,我在AWS上部署Symfony应用程序。我用弹性豆茎。 在部署过程之后,我想运行一些symfony命令:清除缓存、更新数据库 所以我创建了.ebextention,里面有.config commands: 01updateComposer: command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update 1.0.0-alpha11 cache: command: sudo
commands:
01updateComposer:
command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update 1.0.0-alpha11
cache:
command: sudo php /var/www/html/bin/console cahce:clear --env=prod
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: COMPOSER_HOME
value: /root
但我的cache
命令不起作用,或者它在错误的时刻起作用
有人能帮我吗
更新:
实际上我更新了配置文件。
现在我在/tmp中看到end.txt、collect.txt、dump.txt。他们很好。
但我没有在现场修改。例如,没有资产负债表。看起来命令在错误的时刻运行
commands:
01updateComposer:
command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update 1.0.0-alpha11
collect:
command: sudo php /var/www/html/bin/console collect --nb=1 --env=prod >> /tmp/collect.txt
assetic:
command: sudo php /var/www/html/bin/console assets:install --symlink --env=prod >> /tmp/dump.txt
dump:
command: sudo php /var/www/html/bin/console assetic:dump --env=prod >> /tmp/dump.txt
end:
command: touch /tmp/end.txt
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: COMPOSER_HOME
value: /root
我还使用了container_命令代替命令。这确实帮助了我
p.s.我只有一个EC2实例。所以这不能是wront实例。我在日志记录方面也有类似的问题,我认为您需要将其放在container_commands部分,而不是commands部分
container_commands:
01updateComposer:
command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update 1.0.0-alpha11
02collect:
command: sudo php /var/www/html/bin/console collect --nb=1 --env=prod >> /tmp/collect.txt
03assetic:
command: sudo php /var/www/html/bin/console assets:install --symlink --env=prod >> /tmp/dump.txt
04dump:
command: sudo php /var/www/html/bin/console assetic:dump --env=prod >> /tmp/dump.txt
05end:
command: touch /tmp/end.txt
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: COMPOSER_HOME
value: /root
您可以查看有关我的问题和解决方案的更多详细信息。如果查看
/var/log/eb activity.log
文件,您将看到所有操作的执行顺序。特别是,您将在部署中看到整个项目被移动到文件夹中的一刻:
[2021-03-05T19:24:43.872Z] INFO [17486] - [Application update app-1ee2-210305_192347@12/AppDeployStage1/AppDeployEnactHook/01_flip.sh] : Completed activity. Result:
++ /opt/elasticbeanstalk/bin/get-config container -k app_staging_dir
+ EB_APP_STAGING_DIR=/var/app/ondeck
++ /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
某些命令(如php-artisan-view:cache
)需要在项目移动后运行,否则它们将无法正常工作
为此,您可以使用(注意:仅适用于Amazon Linux,而不是新的基于nginx的Amazon Linux 2)
在以后的.config
文件中,您只需添加如下内容:
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_z_post_deploy.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
echo "Running post.sh script"
# Turn on maintenance mode
#php /var/app/current/artisan down || true
# Run database migrations
php /var/app/current/artisan migrate --force
这将在“appdeploy”阶段的“post”阶段执行“/opt/elasticbeanstalk/hooks/appdeploy/post/99_z_post_deploy.sh”
行下的任何命令。99_uu将把它带到最后(一切按字母顺序执行)
同样,您可以在eb activity.log
文件中查看它的执行位置。上面的示例将执行shell脚本“post.sh”
对于AmazonLinux2,您需要使用
这一切都有点晚了,但希望能有所帮助。这也是我在写这个答案时发现的一个不错的指南:。这可能会有进一步的帮助。share logs@KushVyas我更新了我的问题。实际上,日志是可以的。我甚至将一些命令保存在/tmp/*.txt文件中。这些命令是按字母顺序执行的,因此上面的命令将以错误的方式执行。请看上面的ahhh@Tom,也许这会对我有所帮助。我将在一个小时内尝试,谢谢你。不,这没有帮助,我认为默认情况下,symfony的elastic beanstalk会在部署结束时启动clear cache。我找不到任何解决办法。也许我会回到这个问题,当我在AWS技术上变得更强一点的时候。