Capifony - 当 Symfony 应用程序不在 Git 存储库的根目录时部署

Capifony - deploy when Symfony app is not in root of Git repo

我正在使用 Capifony (v2.15.5) 将我的 Symfony (2.6.5) 应用程序部署到远程服务器。我正在使用 deployment strategy "a)",其中更改被推送到 Git,然后在部署时服务器克隆 repo 以提供最新的应用程序文件。直到最近,我的这个工作正常,但我已经改变了我的回购协议的结构,现在不行了。

具体以前是这样的,Symfony project root 和 Git root:

[root]
    app/
    src/
    web/

但现在是这样的,Symfony 项目根是 Git 根的子节点:

[root]
    dbscripts/
    docs/
    webapp/
        app/
        src/
        web/

这给 Capifony 带来了一些麻烦并不奇怪,但我原以为可以配置我的出路,但到目前为止运气不好。

这是我的一些 deploy.rb:

set :app_path,    "webapp/app"

set :repository,  "ssh://[repodetails]"
set :scm,         :git

set :shared_files,      [app_path+"/config/parameters.yml"]
set :shared_children,     [app_path + "/logs", "webapp/vendor"]

set :use_composer, true

如您所见,我已尝试在配置中反映新的 Symfony 根目录,这让我到目前为止,但目前我的部署在 Composer 步骤失败,因为它正在执行安装命令Git 根,这不是 composer.jsoncomposer.lock 所在的位置。

我在这里发现了一个非常相似的问题:Redefined symfony root project。那里没有太多细节,而且它已有 3 年历史,所以我认为值得重温。

我可能会把它移回原来的样子,并可能使用 Git 子模块(虽然对我来说是新领域)来保持旧结构的一些外观。但我的问题是:是否可以将 Capifony 配置为与不在 Git 根目录中的 Symfony 根目录一起正常工作?如果是这样,如何;如果不是,最好的解决方法是什么。

提前致谢!

我找到了一个德国博客 post 谈论这个问题 here。您基本上需要更改这些配置值:

set :cache_path, "api/app/cache"
set :composer_options, "--no-dev --verbose --prefer-dist --optimize-autoloader --working-dir=api"
set :composer_dump_autoload_options, "--optimize --working-dir=api"
set :symfony_console, "api/app/console"

同时适当地更改您的 shared_files / shared_children 值。

在此示例中,Symfony2 项目安装在 api 目录中。只需根据您的需要进行更改即可。