一旦部署到Elastic Beanstalk,就会混淆laravel应用程序中的文件夹结构

时间:2016-06-09 14:58:32

标签: php laravel amazon-web-services

我将laravel应用程序部署到AWS Elastic Beanstalk后,它给出了文件夹var/app/current/vendor中缺少文件的错误...

该文件存在于我本地计算机上的app/vendor内。在将本地应用程序部署到AWS之前,是否必须配置本地应用程序,以便它也能反映AWS'首选目录结构?

编辑:这是收到的错误:

ErrorException in ClassLoader.php line 412:
include(/var/app/current/vendor/composer/../symfony/http-foundation/Session/Storage/MetadataBag.php): failed to open stream: No such file or directory

1 个答案:

答案 0 :(得分:7)

Elastic beanstalk首先在/var/app/ondeck目录中设置应用程序,然后将其交换为/var/app/current

它们提供了一种方法来运行所有必要的脚本,如composer install到.config文件来处理这类任务。

这是我的setup.config文件:

commands:
  composer_update:
    command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update

option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /root

container_commands:
  01-install_dependencies:
    command: "php /usr/bin/composer.phar install"
    cwd: "/var/app/ondeck"
  02-artisan_migrate:
    command: "php artisan migrate --force"
    cwd: "/var/app/ondeck"
    leader_only: true

您可以将其保存在项目根目录的.ebextensions目录中。

脚本正在做的是首先更新composer,运行composer install然后再进行artisan migrate。

最后,整个事物(以及供应商目录)随后被移动到/var/app/current目录。

希望这会有所帮助,AWS文档页面中有更多信息:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html

这篇文章" Laravel on AWS Elastic Beanstalk"

http://blog.goforyt.com/laravel-aws-elastic-beanstalk-dev-guide/