Capistrano - 机器名称

时间:2011-02-14 21:13:46

标签: capistrano

我有此任务将生产日志下载到我的本地计算机。如果你有一台机器在运行,它可以正常运行,但是如果你有几个文件将自动覆盖它们。

namespace :log do
  desc "Get production log files"
  task :get_prod, :roles => :app do
    download("/home/user/myapp/shared/log/production.log", "log/production.log")
  end
end

我想在文件名中添加某种标识符,所以它是唯一的,但我不确定要使用什么?我可以使用capistrano变量吗?

1 个答案:

答案 0 :(得分:4)

是的,您可以使用特殊变量。此变量(“$ CAPISTRANO:HOST $”)需要放在目标文件的名称中。 Capistrano将使用当前传输文件的主机名称进行插值。 *

您的代码现在看起来像这样:

namespace :log do
  desc "Get production log files"
  task :get_prod, :roles => :app do
    download("#{shared_path}/log/production.log", "log/production.$CAPISTRANO:HOST$.log")
  end
end

请注意我还使用了变量 shared_pa​​th 来使代码更干。将配置保存在一个地方是一种很好的做法。


* 字符串插值的源代码位于lib / capistrano / transfer.rb第194行(在Capistrano 2.5.19中):

...
def normalize(argument, session)
  if argument.is_a?(String)
    argument.gsub(/\$CAPISTRANO:HOST\$/, session.xserver.host)
  elsif argument.respond_to?(:read)
...

一般建议:如果你试图在互联网上找到一些东西,当你在那里找不到它时,请查看源代码(它不会咬人并且让你知道你的工具是怎样的与作品合作。)