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

时间:2014-12-23 19:32:34

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

我有一个Laravel Web应用程序,其中包含我在工作台中开发的软件包。该软件包是app的git repo的一部分。该应用程序托管在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

我在我的开发机器上看到了类似的错误,我通过在Laravel 4 workbench class not found中描述的workbench包目录中运行composer install来解决。问题是,在EB在应用程序Vendor目录上运行composer之前,我无法在我的包上运行composer。配置文件的commands块太早 - 服务器上的文件还没有 - 而且container_commands块太晚了,因为它发生在EB运行编写器之后。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 修改/.gitignore并删除说/ vendor
  2. 的行
  3. 使用以下内容创建/vendor/.gitignore并将其添加到git。这会将vendor目录与单个.gitignore文件添加到git,但会忽略其余的供应商包子目录(在部署期间将由作曲家填充)。

    # ignore everything except .gitignore
    !.gitignore
    *
    
  4. 您可能已经在/.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"
    
  5. 确保/.ebextensions/01composersettings.config也是git索引的一部分(git ls-tree -r master --name-only方便检查所有文件是否存在,包括仅{{1的vendor目录在它里面)

  6. 运行.gitignore