私はRailsプロジェクトでのみ使用されるGemを開発しています。これは、Railsアプリケーションのlib
ディレクトリ内で開発され、別のGemで抽出されるようになりました。レールに応じてGemコードをロードするタイミング
いくつかのクラスは、ロードされるRailsフレームワークに依存します。二つの例:
class OurGem::Hookup
CONFIG_PATH = 'config/hookup.rb'.freeze
[...]
end
class OurGem::RoutingContainer
include Rails.application.routes.url_helpers
[...]
end
通常、私はrequire
を使用して宝石のメインモジュールファイル内の宝石コードをロードします。しかし、これがバンドラーによってロードされるので、Railsは準備ができておらず、Rails.application
とRails.root
のようなものは使用できません。最初の例は、読み込み時にパスを評価しないことで回避できますが、2番目の例はわかりにくいようです。
これを行う正しい方法は何ですか?レールティを使用してイニシャライザを登録し、そこに「微妙な」ファイルが必要ですか?
あなたの答えをありがとう。まあ、私たちのGemはエンジンの機能(コントローラー、ルートなど)を提供していませんが、ホストアプリケーションのルートを使ってミックスインを提供します。私は、Railsエンジンがこれをどのように手助けするのか正確にはわかりません。 – Remo