Capistrano 3 基于角色的链接文件

Capistrano 3 role based linked files

是否可以使用内置 linked_files 根据角色将 Capistrano 3 配置为 link 不同的文件?

我有角色为 worker 的服务器,它们不需要 linked 的网络资料相关文件(即 sitemap.xml 文件)。

简短回答:不,Capistrano 中的变量(例如 :linked_files)是全局变量,每个 host/role 不能有不同的值。

您可以通过使用您自己的自定义实现重新定义 deploy:symlink:linked_filesdeploy:check:linked_files 任务来使其工作。例如,该实现可以为不同的角色执行不同的链接。

Rake::Task["deploy:symlink:linked_files"].clear_actions

task "deploy:symlink:linked_files" do
  on release_roles(:web) do
    execute :ln, "-s", ...
    execute :ln, "-s", ...
    # etc.
  end
  on release_roles(:app) do
    execute :ln, "-s", ...
    execute :ln, "-s", ...
    # etc.
  end
end

但是,我不建议这样做,原因有二:

  1. 要写的代码很多
  2. 你失去了 Capistrano "magic",其中 Capistrano 插件将东西注入 :linked_files

no_release: true 将跳过链接文件。对于我来说,这对于 web 角色来说已经足够了,因为我们只在那里上传维护页面。