我刚刚创建了一个新的gem(使用bundler)并希望添加Active Record支持。所以我在我的gemspec中添加了s.add_dependency "activerecord", "~> 3.0"
。然后我使用Bundler.setup和Bundler.require,并认为我现在可以访问Active Record,但我没有。我必须明确使用require "active_record"
。在这种情况下,任何想法为什么Bundler.require对我不起作用?
答案 0 :(得分:12)
首先,如果您要打包宝石,do not use Bundler.require
。 Bundler.require
适用于不属于宝石的应用。
在.gemspec
中,指定已部署gem的依赖关系。
在Gemfile
中,添加第gemspec
行,自动在您的.gemspec
中自动包含Gemfile
中列出的依赖关系。
您也可以选择为开发和测试创建gem组。
在您的代码中,明确require
您需要的任何库。
今天我失去了几个小时,所以我希望这会有所帮助。
其次,虽然ActiveRecord gem被称为“activerecord”,但lib被称为“active_record”。这是您在Gemfile
中需要的内容。
gem 'activerecord', :require => "active_record"
除非你包含:require
选项,否则ActiveRecord将无法正确加载,在你尝试使用它之前你不会知道它。
答案 1 :(得分:1)
如果您想使用Bundler,则需要使用Activerecord定义Gemfile
gem 'activerecord', "~> 3.0.0"
或者您需要定义bundler以使用gemspec并在Gemfile中添加gemspec
gemspec
答案 2 :(得分:0)
我遇到了这个问题,我的问题是我在我的gem活动记录中命名了一个目录,如:
If
这引起了大量混淆,包括如下的甜蜜错误消息:
lib ->
active_record ->
base.rb <- containing some monkey patches to base
只需将文件从Gem Load Error is: uninitialized constant ActiveRecord::Base
Did you mean? ActiveRecord::Base
更改为lib/active_record/base.rb
,即可为我修复。