2010-10-25 21 views
3

我刚刚创建了一个新的创业板(使用捆绑器)并希望添加Active Record支持。所以我将s.add_dependency "activerecord", "~> 3.0"添加到我的gemspec中。然后我使用Bundler.setup和Bundler.require,并认为我现在可以访问Active Record,但我没有。我必须明确使用require "active_record"。任何想法为什么Bundler.require在这种情况下不适用于我?Bundler.require不适用于我的创业板中的ActiveRecord

回答

11

首先,如果您打包宝石,do not use Bundler.requireBundler.require仅适用于应用程序,不适用于宝石。

  • .gemspec,指定部署宝石的依赖关系。

  • 在你Gemfile,包括线gemspec自动在您的Gemfile.gemspec列出的依赖关系。

    您也可以选择为开发和测试创建gem组。

  • 在您的代码中,明确require您需要的任何库。

我在今天失去了几个小时,所以我希望这有助于。

(来源12

其次,虽然创业板的ActiveRecord被称为 “ActiveRecord的” 的lib被称为 “active_record”。这是你需要在Gemfile

gem 'activerecord', :require => "active_record" 

除非你包括:require选项,ActiveRecord的将不被正确加载,你不会知道它,直到你尝试使用它。

1

如果你想使用捆扎机,你需要用ActiveRecord

gem 'activerecord', "~> 3.0.0" 

定义你的Gemfile或者您需要定义捆绑使用您的gemspec在你的Gemfile添加gemspec

gemspec 

http://gembundler.com/rubygems.html

+0

我的Gemfile中已经有gemspec(bundler会自动为新创建的gem做这件事),所以这不是问题。 – Zardoz 2010-10-25 17:14:13

0

我有这个问题,在我的情况下,问题是,我是在我的宝石活动记录命名的目录,如:

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更改为lib/active_record_base.rb为我修复。