使用 Amazon Elastic Beanstalk 部署 Laravel 工作台包


Deploying Laravel workbench package with Amazon Elastic Beanstalk

我有一个Laravel网络应用程序,其中包含我在工作台中开发的软件包。该包是应用的 git 存储库的一部分。该应用程序托管在 Elastic Beanstalk 环境中。

当我使用eb deploy部署应用程序时,我在 eb-activity 中收到以下错误.log(来自 eb logs):

...
(output of composer package fetches)
...
Generating autoload files
PHP Fatal error:  Class 'Me'MyPackage'MyPackageServiceProvider' not found in /var/app/ondeck/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 157
{"error":{"type":"Symfony''Component''Debug''Exception''FatalErrorException","message":"Class 'Me''MyPackage''MyPackageServiceProvider' not found","file":"'/var'/app'/ondeck'/vendor'/laravel'/framework'/src'/Illuminate'/Foundation'/ProviderRepository.php","line":157}}Script php artisan clear-compiled handling the post-install-cmd event returned with an error

  [RuntimeException]                                                                                                                                                                                   
  Error Output: PHP Fatal error:  Class 'Me'MyPackage'MyPackageServiceProvider' not found in /var/app/ondeck/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 157

我在开发机器上看到了类似的错误,我通过在工作台包目录中运行composer install来解决,如找不到 Laravel 4 工作台类中所述。问题是,在 EB 在应用程序供应商目录上运行作曲家之前,我无法在我的软件包上运行作曲家。配置文件的commands块太早 - 文件尚未在服务器上 - 并且container_commands块太晚,因为它发生在EB运行composer之后。

如何先运行我的包编辑器?

我想

我解决了这个问题,尽管感觉有点笨拙。如果应用程序的根目录中有供应商目录,EB 不会自动运行作曲家,所以......

  1. 编辑/.gitignore并删除显示/vendor 的行
  2. 使用以下内容创建/vendor/.gitignore并将其添加到 git。这会将包含单个.gitignore文件的vendor目录添加到 git,但会忽略其余的供应商包子目录(将在部署期间由 composer 填写)。

    # ignore everything except .gitignore
    !.gitignore
    *
    
  3. 您可能已经在/.ebextensions中有一个作曲家部署配置文件,但以防万一,这是我的全部内容(称为01composersettings.config),因为其他命令也进行了一些调查。特定于我的问题的两个命令是在02installPackages之前运行的01installWorkbenchPackages

    commands:
        01updateComposer:
            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:
        01installWorkbenchPackages:
            command: "/usr/bin/composer.phar install -d /var/app/ondeck/workbench/me/my-package"
        02installPackages:
            command: "/usr/bin/composer.phar install"
        03optimize:
            command: "/usr/bin/composer.phar dump-autoload --optimize"
        04storagePermissions:
            command: "chmod -fR 755 /var/app/ondeck/app/storage"
    
  4. 确保/.ebextensions/01composersettings.config也是 git 索引的一部分(git ls-tree -r master --name-only可以方便地检查所有文件是否都在那里,包括只有 .gitignorevendor 目录)

  5. 运行eb deploy