12

現在、機能をエンジンに移す実験を行っています。これまでのところ問題なく動作していますが、何かが変更されたときにエンジンの特定の部分が常に自動的にリロードされ、そうでない部分があるのはなぜなのか、少し混乱しています。

具体的には、ヘルパー メソッドを追加するときに、Rails サーバーを再起動する必要があります。そうしないと、Rails から認識されません。これは正常な動作ですか?私のエンジンの関連部分は次のとおりです。

components/iq_list.rb

# encoding: utf-8
require 'iq_list/engine'

# Load IqList Modules
module IqList
  extend ActiveSupport::Autoload
  autoload :Helpers
  autoload :Models
  autoload :Controllers
end

コンポーネント/iq_list/engine.rb

module IqList
  class Engine < ::Rails::Engine
  end
end

コンポーネント/iq_list/helpers.rb

module IqList
  module Helpers
    extend ActiveSupport::Autoload
    autoload :IqListHelper
  end
end

components/iq_list/helpers/iq_list_helper.rb

module IqList
  module Helpers
    module IqListHelper
      def some_method
        # ...
      end
    end
  end
end

私はまだエンジンに非常に慣れていないので、上記のコードの多くは他の人の仕事から取ったものなので、しばらくお待ちください。正しい方向へのヒントは高く評価されます。

4

2 に答える 2

1

エンジンで間違ったツリーを鳴らしているようです。単純に懸念事項の分離を実現しようとしている場合は、単純な古い Ruby クラスをいくつか作成して、それらを貼り付けたいだけかもしれませんlib/(もちろん、組織的な方法で)。

エンジンは、「現在の」プロジェクトとは別に開発され、gem を通じて持ち込まれる可能性があります。含まれている宝石を変更すると、サーバーの再起動が必要になります。

于 2014-08-03T16:58:21.557 に答える
1

リクエストごとにエンジンからコードをリロードする必要がある場合は、エンジンの初期化コードの to_prepare ブロックに配置する必要があります

module IqList
  class Engine < ::Rails::Engine
    config.to_prepare do
     ApplicationController.helper(IqListHelper)
    end
  end
end

to_prepare ブロック内のコードは、本番環境では 1 回、開発環境では毎回実行されることが保証されています。

Railsガイドと このRailsエンジンコードの意味を参照してください: config.to_prepare &method(:activate).to_proc

http://robots.thoughtbot.com/tips-for-writing-your-own-rails-engine

于 2014-10-24T05:42:56.883 に答える