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

Zar*_*doz 3 ruby gem ruby-on-rails bundler

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

Dav*_*lan 12

首先,如果您要包装宝石,请不要使用Bundler.require.Bundler.require适用于非宝石的应用.

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

  • 在您的帐号中Gemfile,添加一行gemspec以自动包含您.gemspec在其中列出的依赖项Gemfile.

    您也可以选择为dev和test创建gem组.

  • 在您的代码中,显式地显示require您需要的任何库.

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

(来源 1,2)

其次,虽然ActiveRecord gem被称为"activerecord",但lib被称为"active_record".这就是你需要的Gemfile.

gem 'activerecord', :require => "active_record"
Run Code Online (Sandbox Code Playgroud)

除非您包含该:require选项,否则ActiveRecord将无法正确加载,在您尝试使用它之前您不会知道它.