capistrano 3.8,shared_path 似乎部分被忽略

capistrano 3.8, shared_path seems partly be ignored

我正在处理 capistrano 部署配置,想在另一个地方设置共享文件夹。背景是,我想使用通配符部署(审查应用程序)并且目标目录将即时生成(这意味着其中没有共享文件夹)并且我会使用共享文件夹此环境中所有评论应用的资产。

因此我在服务器上有目录:

/var/www/review/application_name

/var/www/review/application_name/shared/...(这里是我想在所有评论应用程序中共享的资产和配置)

/var/www/review/application_name/branch-name/ - 这是 capistrano 在将特定分支部署到审查阶段时将创建的部署路径。

我用过shared_path

set :shared_path, "/var/www/review/#{fetch(:application)}"

这对 linked_dirs 很好用,但对 linked_files 不行。我收到错误消息:

00:01 deploy:check:linked_files
  ERROR linked file /var/www/review/www.app.tld/123/shared/myfile does not exist on review.app.tld

这是真的 - 但我不知道如何告诉 cap 将其放置到位。当然,命名文件在共享文件夹中

/var/www/review/www.app.tld/shared/

但是 capistrano 在尝试检查 linked_files 时似乎搜索了错误的位置(再次:linked_dirs 处理正确)。

有什么提示吗?提前致谢!

如果您的 :application 变量在稍后定义或更改,您将需要设置为延迟变量:

set :shared_path, -> { "/var/www/review/#{fetch(:application)}" }

这会按需而不是提前评估该字符串。

shared_path 不是您可以直接配置的东西。使用 set 不会有任何效果。

Capistrano 中的共享路径总是 一个在您的:deploy_to 位置内名为shared 的目录。因此如果你想改变共享路径,你必须设置:deploy_to,像这样:

set :deploy_to, -> { "/var/www/review/#{fetch(:application)}" }

这将有效地导致 shared_path 变为:

"/var/www/review/#{fetch(:application)}/shared"

请记住,:deploy_to 用作许多内容的基本目录:releasesrepocurrent 等。因此,如果您更改 :deploy_to你会影响他们所有人。