私の gem では、Bundler.require が ActiveRecord に対して機能しません
-
26-09-2019 - |
質問
(バンドラーを使用して) 新しい 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
必要なライブラリ。
今日はこれで数時間ロスしたので、これがお役に立てば幸いです。
次に、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.rb
にlib/active_record_base.rb
からファイルを変更動かす私のためにそれを修正します。