【问题标题】:Symfony2, AWS Beanstalk: how to push vendor as files not git-submodules to repoSymfony2,AWS Beanstalk:如何将供应商作为文件而不是 git-submodules 推送到 repo
【发布时间】:2026-02-23 19:40:01
【问题描述】:

我们在 AWS Beanstalk 应用程序上使用 Symfony2。对于部署,我们调整了部署脚本以在应用程序上传后执行 composer install

尽管这在理论上可行,但它也有一些缺点 - 主要是不断增加的部署时间(有时会导致服务器超时)以及对其他服务器可用性的依赖性增加。

我读到有人将vendor/* 复制到 tmp-dir 并在部署后将其移回speed-up the deployment

这确实很有帮助,但我们经常更新我们的composer.json,所以我们仍然需要在部署过程中安装 composer。我们认为最好的方法是将所有依赖项 (vendor/*) 作为文件包含在 repo 中,并在部署期间跳过 composer install

不幸的是,大多数库都包含在 git-submodules 中,AWS 不支持子模块(所有文件都必须在 repo 中)。

那么我的问题来了:

删除所有 git 子模块并提交真实文件的最佳方法是什么?

我尝试过结合:

git submodules --recursive foreach

使用How do I remove a submodule? 但没有成功。

【问题讨论】:

    标签: git symfony amazon-web-services git-submodules amazon-elastic-beanstalk


    【解决方案1】:

    你可以试试这个工作流程:

    • 创建一个新的发布文件夹
    • 在新文件夹中签出最新版本的代码
    • 将“供应商”从当前活动的发布文件夹复制到新的发布文件夹中
    • 运行“composer.phar install”

    这样,composer 只会更新版本之间发生变化的库。

    我成功地将它与 capistrano 一起使用(还有一个名为 capifony 的 Symfony 特定版本)可以帮助您。特别是因为它可以保留您的 git 存储库的克隆,因此推出新版本的速度要快得多,并且部署和回滚是单行的。

    【讨论】: