生产和测试/开发环境使用不同的composer.json文件

9

场景:

我有一个现有的实时网站,通过几个GIT存储库在dev-master上加载composer依赖项。

客户提出了一个新的功能请求,在将其从develop合并到master之前,我需要部署新的(未完成的)功能到暂存环境中,以获得客户的确认后再推送到实时环境(我可能需要向客户展示新功能的早期版本,但还没有准备好用于主分支)。

我通常使用capistrano部署东西(我想这并没有什么区别)。

由于新代码很可能是需要重构的现有插件,因此我无法使用require-dev

理想情况下,我希望能够在暂存/开发环境中使用dev-develop作为插件,而在实时环境中使用dev-master,但是在同一个composer.json文件中不能有两个相同的存储库。

我该怎么做呢?


你可以在不同的git分支上拥有两个不同版本的composer.json。在开发新功能时,将其放在名为“my-feature”的单独分支中,并将其部署到开发环境以进行展示。 - Ivan Velichko
@Ostrovski 是的,我考虑过这个问题,但这并没有真正帮助到我... 我需要能够同时部署到生产和暂存环境。我不想将 develop 合并到 master 中,然后手动更改 composer.json 文件。 - Richard Sweeney
1个回答

19
解释:此段文字讲述如何解决问题,并介绍了两个名为composer.json和composer.lock的文件,以及一个名为composer-dev.json和composer-dev.lock的文件。
解决方案是使用环境变量。
我有2个composer.json文件(还有2个composer.lock文件)。第二个文件我命名为composer-dev.json(这将随后生成一个名为composer-dev.lock的锁定文件)。
在我的Capistrano部署配置中,针对阶段服务器,我添加了以下内容:
set :default_env, {
    'COMPOSER' => 'composer-dev.json'
}

我可以在我的本地机器上像这样即时定义环境变量:

$ COMPOSER=composer-dev.json composer update

这将生成composer-dev.lock文件,我随后可以部署到暂存服务器。

当然,我也可以在暂存服务器上配置环境,但在我的 Capistrano 配置中这样做似乎更容易。


你好,我对Web开发和部署非常陌生,能否提供一些关于如何通过环境变量控制不同composer.json文件的资源?我只是在做一个非常小的测试任务,想要部署它,但我需要一个非常微小的不同的composer文件,所以学习Capistrano或Phing似乎对此有些困难。 - Scott Anderson
这正是我正在寻找的。你救了我的一天,Richard!祝你有美好的一天! - ben.IT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接