4

Railtie を介してロードされる Rails アプリケーション用の gem を開発しています。私は基本的に、古いRailsアプリのスタイルで、ライブラリといくつかのイニシャライザにモデルを挿入しています。私の主な懸念は、Rails アプリケーションのローディング ロジック全体で、ロジックを挿入するのに最適な場所を正確に把握していないことです。私の要件は、アプリの初期化子の前に宝石の初期化子をロードする必要があり、ライブラリと同じことであり、初期化子がライブラリ情報にアクセスすることです。Rails アプリのワークフローでは、何とか機能します。私の短期的な回避策は次のとおりです。

module Gemname
  def self.initialize_railtie
    ActiveSupport.on_load :active_record do
      require 'gemname/lib'
      require 'gemname/initializers'
    end
  end
  class Railtie < Rails::Railtie
  initializer 'gemname.insert_into_app' do
    Gemfile.initialize_railtie
  end
end 

このようにして、ライブラリが初期化子の前にロードされると確信しています。それを行うためのより良い方法があると確信しています。つまり、いくつかのrailtieフックにアクセスして、アプリのライブラリを使用してライブラリをロードし、アプリの初期化子を使用して初期化子をロードできるようにします。ただ、それらを見つけることができないようです。

4

1 に答える 1

11

あなたが望むのは だと思いますconfig.after_initializeここによると:

実行する最後の構成可能なブロック。フレームワークの初期化後に呼び出されます。

そしてここに

after_initialize: アプリケーションの初期化直後、ただしアプリケーション初期化子が実行される前に実行されます。

したがって、次のようになります。

module Gemname
  class MyCoolRailtie < ::Rails::Railtie
    config.after_initialize do
      require 'gemname/lib'
      require 'gemname/initializers'
    end
  end
end
于 2012-10-15T22:36:23.807 に答える