質問

(バンドラーを使用して) 新しい gem を作成したところなので、アクティブ レコードのサポートを追加したいと考えています。それで私は追加しました s.add_dependency "activerecord", "~> 3.0" 私のgemspecに。次に、Bundler.setup と Bundler.require を使用し、Active Record にアクセスできるようになったと思っていましたが、アクセスできませんでした。明示的に使用する必要があります require "active_record". 。この場合、Bundler.require が機能しない理由はありますか?

役に立ちましたか?

解決

まず、宝石をパッケージ化する場合、 使ってはいけません Bundler.require. Bundler.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 が正しくロードされず、使用してみるまでそのことを知りません。

他のヒント

あなたはActiveRecordをして、あなたのGemfileを定義する必要がバンドラーを使用したい場合は、

gem 'activerecord', "~> 3.0.0"

あなたのGemfileにgemspecを追加することで、あなたのgemspecを使用するバンドラ定義する必要とするか、または

gemspec

を参照してください。 http://gembundler.com/rubygems.htmlする

私はこの問題を抱えていたし、私の場合は問題は、私はのように、私の宝石アクティブレコード内のディレクトリを命名されたということでした。

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.rblib/active_record_base.rbからファイルを変更動かす私のためにそれを修正します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top