为什么我无法访问Capistrano任务之外的变量

时间:2013-07-03 11:53:05

标签: ruby capistrano

我想在Capistrano中设置这个延迟变量,这取决于我在调用任务期间设置的一些变量

set(:installation_dir) do 
    if target == "staging"
        "/some/path"
    else
        "/some/other/path"
    end
end

task :foo do
    p "INSTALLATION_DIR >>> #{installation_dir}"
end

如果运行任务,则会发生此错误

Hector:monitoring-agent robertj$ cap foo -s target=development
/Users/robertj/.rvm/gems/ruby-2.0.0-p0@pf/gems/capistrano-2.15.4/lib/capistrano/configuration/variables.rb:122:in 
`method_missing_with_variables': undefined local variable or method `target' for 
#<Capistrano::Configuration:0x007fd6a22f9100> (NameError)

这让我很生气。为什么Capistrano 2.x有一个简单的方法来访问变量,无论我打电话。

2 个答案:

答案 0 :(得分:1)

看起来,fetch做你想做的事情

p "INSTALLATION_DIR >>> #{fetch(:installation_dir)}"

答案 1 :(得分:0)

当你像那样运行它时,你正在设置一个环境变量。要在Capistrano脚本中使用它,您需要set :target, ENV['target']