0

这是一个topic.gemspec

Gem::Specification.new do |s|
  s.name        = 'topic'
  s.version     = '1.0.0'
  s.date        = '2012-12-30'
  s.files   = ["lib/models/topic.rb"]
end

gem 位于我的应用程序根目录中。

在 Gemfile 中:

gem 'topic', :path => '.'

运行应用程序时,我看不到主题类。

uninitialized constant ApplicationController::Topic

我究竟做错了什么?

谢谢。

4

2 回答 2

1

您应该确保捆绑程序需要您的 gem。你应该有一个文件lib/topic.rb。添加一个puts语句并检查它是否在您启动应用程序或控制台时显示。

作为旁注。我认为您不应该在目录的根目录中有 gemspec。这将导致您的 lib 文件夹用于 gem 和 rails 应用程序。例如,最好创建一个子文件夹topic/,然后在其中托管 gem。然后,您可以将其添加到 Gemfile 中:

gem 'topic', :path => './topic'
于 2012-12-30T19:50:26.823 回答
0

正如 Yves 所说,我强烈建议您将 gem 放在它自己的目录中。

但是你也可能有其他问题,让我们尝试一些事情:

您似乎正在尝试在控制器内使用主题,也许它没有在外面搜索?:s 尝试::Topic改用。:: 告诉查看“根”,因此它不会搜索ApplicationController::Topic

如果这不起作用,那么您的 gem 中可能没有命名空间。我认为 bundle 或任何需要命名空间(模块)的命名空间(模块)的命名方式与 gem 相同,因此您应该拥有:

# in topic/lib/topic.rb
module Topic
end

#require other parts of the gem
require 'topic/foo'
require 'topic/bar'

希望我能帮上忙

于 2012-12-30T20:32:31.813 回答