Bundler.require对我的gem中的ActiveRecord不起作用

时间:2010-10-25 16:52:44

标签: ruby-on-rails ruby gem bundler

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

3 个答案:

答案 0 :(得分:12)

首先,如果您要打包宝石,do not use Bundler.requireBundler.require适用于不属于宝石的应用。

  • .gemspec中,指定已部署gem的依赖关系。

  • Gemfile中,添加第gemspec行,自动在您的.gemspec中自动包含Gemfile中列出的依赖关系。

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

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

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

(来源 1 2

其次,虽然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

请参阅http://gembundler.com/rubygems.html

答案 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,即可为我修复。