Ruby优化不在CI服务器中工作

时间:2013-03-20 11:23:55

标签: ruby linux ruby-2.0

我在Jenkins服务器中遇到错误:

$ ruby -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]

运行rspec时,出现以下错误:

 undefined method `using' for #<Class:0x000000026f9c88> (NoMethodError)

完全相同的代码在我的本地计算机上运行,​​使用ruby2。 这是我的版本:ruby 2.0.0dev (2012-12-01 trunk 38126) [x86_64-linux] 此外,它适用于irb。似乎ruby在运行脚本时没有识别using语句。

以下是代码:

describe "blah" do
    include TestHelper
    using TestHelper::BrowserRefinement
    ...
end

澄清:细化在不同的文件中定义。我正在鞭打互联网,看看版本r39474r38126之间是否存在差异。

1 个答案:

答案 0 :(得分:8)

在当前版本的Ruby 2.0(2.0.0p0)中,using是顶级对象main的实例方法,而不是Module的实例方法。这是一种私人方法。如果在类/模块定义或方法定义中调用它,则会引发RuntimeError。

“由main.using激活的细化范围是从调用main.using之后到调用main.using的文件末尾。但是,当{{1}在作为main.usingKernel#evalKernel#instance_eval的第一个参数给出的字符串中调用,范围的结尾是字符串的结尾。“

您可以在Refinements Specification中了解详情。

对于您的测试用例,您可以使用Module#module_eval编写它们并传入顶级绑定,例如ruby源中的test cases

优化仍然是一项实验性功能,未来可能会发生变化: - )