Symfony2,AWS Beanstalk:如何将供应商作为文件而不是 git-submodules 推送到 repo

Posted

技术标签:

【中文标题】Symfony2,AWS Beanstalk:如何将供应商作为文件而不是 git-submodules 推送到 repo【英文标题】:Symfony2, AWS Beanstalk: how to push vendor as files not git-submodules to repo 【发布时间】:2013-02-27 20:04:46 【问题描述】:

我们在 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? 但没有成功。

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于Symfony2,AWS Beanstalk:如何将供应商作为文件而不是 git-submodules 推送到 repo的主要内容,如果未能解决你的问题,请参考以下文章

使用 Amazon Elastic Beanstalk 部署 symfony2.1 应用程序

在 AWS 上的 symfony 2.8 应用程序中更改根目录 - Elastic Beanstalk

如何在中国区域的AWS beanstalk实例上部署美国区域的AWS beanstalk实例

如何解决在 aws 上打开 symfony2 安装时出现 403 Forbidden 错误?

AWS Cloudformation:如何在 AWS 弹性 beanstalk 配置中引用多个安全组

如何使用 AWS CLI 更新弹性 beanstalk 代码?