【发布时间】:2010-12-16 17:50:18
【问题描述】:
到目前为止的故事:
我有一个名为“Term”的模型的 rails 应用程序。一切都很好,直到尝试安装 Cucumber。运行时
rake cucumber
我明白了
Term is not a class (TypeError)
这是因为 Cucumber 包含另一个 gem,“term-ansicolor”(在控制台中输出漂亮的彩色文本),并且 term-ansicolor 定义了一个名为“Term”的模块。 Cucumber 在包含 Rails 模型之前包含 term-ansicolor,因此在加载“Term”模型时“Term”已经定义为模块。顶级模块和类在 Ruby 中不能有相同的名称,因此会发生冲突。
不想重命名模型,我着手修补术语 ansicolor gem。事实证明这比我想象的要难。我将 Term 模块名称更改为“ANSITerm”,但我不知道如何让 Cucumber 加载我已将其放入 RAILS_ROOT/vendor/gems/term-ansicolor 的修改后的 gem。
有什么想法吗?我是不是找错树了?
【问题讨论】:
-
我刚刚遇到了这个 exact 问题,我也有一个名为 Term 的模型,并且刚刚安装了 cucumber。幸好我在花了几个小时试图弄清楚发生了什么之前搜索了那个错误!非常感谢您发布此内容,我会关注您的解决方案!
-
我很高兴这对您有所帮助。请记住,您必须继续维护已修补的 gem,因此重命名模型可能会更容易。
-
我实际上已经在这里评论了这个黄瓜错误:rspec.lighthouseapp.com/projects/16211-cucumber/tickets/489 我正在努力从 github 获取您的补丁 term-ansicolor 与补丁黄瓜集成,这样我们就不必维护修补的宝石;但是,是的,我同时重命名了我的模型。
标签: ruby-on-rails ruby namespaces cucumber collision