ruby-on-rails - 如何解决 Rails 模型 namespace 冲突

标签 ruby-on-rails ruby namespaces cucumber collision

到目前为止的故事:

我有一个 Rails 应用程序,其模型名为“Term”。在尝试安装 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。

有什么想法吗?我是不是找错树了?

最佳答案

这是我做的:

sudo gem uninstall term-ansicolor
sudo gem 卸载 cucumber

从 github 下载 term-ansicolor 和 cucumber 的源代码
在 term-ansicolor 源中搜索 "module Term" 并替换为 "module ANSITerm"
在 cucumber 源中搜索 "include Term" 并替换为 "include ANSITerm"
在 cucumber 源中搜索 "::Term" 并替换为 "::ANSITerm"

sudo gem install term-ansicolor 来 self 的本地存储库
sudo gem install cucumber 来 self 的本地存储库

现在我有两个 gem 需要维护,但这似乎比更改我的应用程序中的所有模型引用更容易。

欢迎提出意见/建议。

关于ruby-on-rails - 如何解决 Rails 模型 namespace 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1736747/

相关文章:

ruby-on-rails - 如何在 rspec 测试中输出变量?

ruby - 关键区域的机器堆栈溢出(致命)

Ruby Thin/Rack 奇怪的多字节字符行为

ruby-on-rails - 如何缩小 rails erb 文件中的 javascript 部分?

Ruby:如何将命名空间类包含到 IRB 中的全局命名空间中

c# - .NET (C#) 将消息从自定义控件传递到主应用程序

c# - 命名空间冲突

ruby-on-rails - 你为 Rails 推荐哪个状态机插件?

ruby-on-rails - Rails - NoMethodError 未定义的方法

ruby-on-rails - Guard 不会根据 spec/features/login_spec.rb 上的更改运行