Ruby Capistrano检查任务中未定义的变量

Ruby Capistrano检查任务中未定义的变量,ruby,capistrano,Ruby,Capistrano,在使用多级扩展的Capistrano中,我有两个环境:prod和testing 我需要testing.rb中一些prod.rb中不需要的变量,我希望我的一些任务能够检查变量是否已定义,如果已定义,则使用它,如果未设置,则忽略它 因此,在testing.rb中,我会有如下内容: set :foo, 'bar' if defined?(foo) # do something with foo else # do something without foo end set :foo, ''

在使用多级扩展的Capistrano中,我有两个环境:prod和testing

我需要testing.rb中一些prod.rb中不需要的变量,我希望我的一些任务能够检查变量是否已定义,如果已定义,则使用它,如果未设置,则忽略它

因此,在testing.rb中,我会有如下内容:

set :foo, 'bar'
if defined?(foo)
  # do something with foo
else
  # do something without foo
end
set :foo, ''
rb不会引用:foo,因为它不需要它。在我的一项任务中,我想做如下工作:

set :foo, 'bar'
if defined?(foo)
  # do something with foo
else
  # do something without foo
end
set :foo, ''
但我一直在犯错误:

undefined local variable or method 'foo'
有没有办法测试任务中未定义的全局变量?或者我必须做一些类似的事情:

set :foo, 'bar'
if defined?(foo)
  # do something with foo
else
  # do something without foo
end
set :foo, ''

在我所有不需要:foo变量的环境中?

尝试使用
存在(:foo)
而不是
定义的?(foo)
,如。

中建议的那样对此进行一点扩展:定义的?方法采用符号(:foo)而不是变量(foo)。set方法实际上并不创建正确的ruby变量,它只是将值保存在内部存储中。这就是为什么您需要使用fetch(:foo)来获取值。这很有效,谢谢。我对Ruby很不熟悉,我想有一个简单的解决方案,但是Google让我失望了,我在文档中错过了它。我认为变量的设置不同,所以它们需要进行不同的检查,但不知道如何使用?我完全被难住了。再次感谢。这太疯狂了!我试着用defined?@JamiePenney defined处理实际变量-如果你给它一个符号,它总是会说这是一个有效的“表达式”ruby doc在atm上,所以这里有一个相关的问题:嗨,你知道Capistrano 3的等价物吗?