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_files
和 deploy: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
但是,我不建议这样做,原因有二:
- 要写的代码很多
- 你失去了 Capistrano "magic",其中 Capistrano 插件将东西注入
:linked_files
no_release: true
将跳过链接文件。对于我来说,这对于 web
角色来说已经足够了,因为我们只在那里上传维护页面。
是否可以使用内置 linked_files
根据角色将 Capistrano 3 配置为 link 不同的文件?
我有角色为 worker
的服务器,它们不需要 linked 的网络资料相关文件(即 sitemap.xml
文件)。
简短回答:不,Capistrano 中的变量(例如 :linked_files
)是全局变量,每个 host/role 不能有不同的值。
您可以通过使用您自己的自定义实现重新定义 deploy:symlink:linked_files
和 deploy: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
但是,我不建议这样做,原因有二:
- 要写的代码很多
- 你失去了 Capistrano "magic",其中 Capistrano 插件将东西注入
:linked_files
no_release: true
将跳过链接文件。对于我来说,这对于 web
角色来说已经足够了,因为我们只在那里上传维护页面。