【问题标题】:Capistrano Checking for undefined variable in TaskCapistrano 检查任务中未定义的变量
【发布时间】:2011-06-23 01:10:50
【问题描述】:

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

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

所以,在 testing.rb 中我会有类似的内容:

set :foo, 'bar'

prod.rb 不会有任何对 :foo 的引用,因为它不需要它。在我的一项任务中,我想做类似的事情:

if defined?(foo)
  # do something with foo
else
  # do something without foo
end

但我不断收到错误消息:

undefined local variable or method 'foo'

有没有办法测试任务中未定义的全局变量?还是我必须做类似的事情:

set :foo, ''

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

【问题讨论】:

    标签: ruby capistrano


    【解决方案1】:

    按照Capistrano docs 中的建议,尝试使用exists?(:foo) 而不是defined?(foo)

    【讨论】:

    • 稍微扩展一下:定义?方法采用符号 (:foo) 而不是变量 (foo)。 set 方法实际上并没有创建正确的 ruby​​ 变量,它只是将值保存在内部存储中。这就是为什么你需要使用 fetch(:foo) 来获取值。
    • 成功了,谢谢。我对 Ruby 非常不熟悉,我认为有一个像这样的简单解决方案,但谷歌让我失望了,我在文档中错过了它。我认为变量的设置不同,因此需要对它们进行不同的检查,但不知道使用存在吗?我完全被难住了。再次感谢。
    • 这太疯狂了!我正在尝试定义?
    • @JamiePenney Defined 与实际变量一起工作 - i.imgur.com/SW1MPI4.png 如果你给它一个符号,它将总是说它是一个有效的“表达式” ruby​​-doc is down atm所以这是来自 SO 的一个相关问题:stackoverflow.com/questions/288715/…
    • 您好,您知道 Capistrano 3 的等价物吗?
    猜你喜欢
    • 1970-01-01
    • 2018-09-09
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多