2

テスト エンジンがあり、そのエンジン内に、メイン アプリの "logs" ディレクトリにある test.log ファイルに書き込むカスタム ロガーを定義したいと考えています。

エンジンクラスで定義しようとしましたが、うまくいきません:

module Test

    class Engine < ::Rails::Engine
        isolate_namespace Test
        tracking_logger = Logger.new(Rails.root.join('log', "tracking.log"), 10, 30*1024*1024)

サーバーを起動しようとすると、次のように表示されます。 <class:Engine>: undefined method join for nil:NilClass (NoMethodError)

これは、エンジン自体からメイン アプリケーションのルート パスを確認できないことを意味します。どうすればそれを手に入れることができますか?

4

1 に答える 1

0

appインスタンスを取得する必要があります。メソッドで行いinitializerます。たとえば、ロケール設定を追跡するには:

module Test
  class Engine < ::Rails::Engine

    initializer("your_engine.set_locale") do |app|
      tracking_logger = Logger.new(app.root.join('log', "tracking.log"), 10, 30*1024*1024)
      config.I18n.default_locale = :en
      tracking_logger.debug("My_Engine just set its custom locale to :en\n\n")
    end

tracking_logger残念ながら、このインスタンスを他の初期化子やメソッドに渡す方法がわかりません。tracking_logger何かをログに記録する必要があるすべてのメソッドで新しいインスタンスを作成するのは良くありません。一度インスタンス化してから、メソッド間でそれを保持する方法の手がかりをいただければ幸いです。

于 2013-06-14T07:50:21.287 に答える