【问题标题】:Deploying Laravel workbench package with Amazon Elastic Beanstalk使用 Amazon Elastic Beanstalk 部署 Laravel 工作台包
【发布时间】:2015-02-21 23:27:51
【问题描述】:

我有一个 Laravel Web 应用程序,其中包含我在工作台中开发的包。该软件包是应用程序 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 workbench class not found 中所述。问题是在 EB 在应用程序供应商目录上运行 composer 之前,我无法在我的包上运行 composer。配置文件的 commands 块太早了——文件还没有在服务器上——而 container_commands 块太晚了,因为它发生在 EB 运行 composer 之后。

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

【问题讨论】:

    标签: php laravel deployment composer-php amazon-elastic-beanstalk


    【解决方案1】:

    我想我已经解决了这个问题,虽然感觉有点笨拙。如果应用的根目录中有供应商目录,EB 不会自动运行 composer,所以...

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

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

      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 可以方便地检查所有文件是否都在那里,包括 vendor 目录中只有 .gitignore

    5. 运行eb deploy

    【讨论】:

      猜你喜欢
      • 2019-09-25
      • 2012-02-24
      • 2013-06-14
      • 2014-12-13
      • 2013-01-20
      • 2014-06-07
      • 1970-01-01
      • 2014-03-06
      • 2013-03-05
      相关资源
      最近更新 更多