2012-08-30 32 views
11

現在、機能をエンジンに移行しています。これまでのところうまくいきましたが、何か変更されたときにエンジンの特定の部分が常に自動的にリロードされる理由と、そうでない部分が混同しているのを少し混乱させます。Railsエンジン:サーバを再起動するとヘルパーのみが再読み込みされます

具体的には、ヘルパーメソッドを追加するときに、Railsサーバーを再起動する必要があります。それ以外の場合は、Railsには表示されません。これは正常な動作ですか?ここに私のエンジンの関連部分です:

コンポーネント/ 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 

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

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

私はまだエンジンには新しく、上記のコードは他の人の仕事から取っているので、私には忍耐強くお待ちください。適切な方向へのヒントは高く評価されます。

+1

http://stackoverflow.com/questions/4713066/how-can-i-force-my-plugin- to-reload-with-each-request – apneadiving

+0

あなたのコードはなぜ 'components'ディレクトリの下にありますか?あなたは何をしているのですか?コンポーネントは、Rails(1.2)の古典的な機能です。 –

+0

あなたはどこに置くでしょうか?言ったように、私は他の誰かからコードを受け取りました、そして、私はそれが 'app/components'の中にものが適切に再読み込みされているからだと思います。あなたはどこに開発しているエンジンを置くのですか? –

答えて

1

あなたはエンジンで間違った木を吠えているようです。単純に懸念の分離を達成しようとしているのであれば、単純な古いルビークラスを作成し、それをlib/(もちろん組織的な方法で)に貼り付けたいと思うでしょう。

エンジンは、現在のプロジェクトとは別に開発され、おそらく宝石を通して持ち込まれます。付属の宝石を変更すると、サーバーのAFAIKを再起動する必要があります。あなたは、すべてあなたが生産し、すべてに一度に実行することが保証されてto_prepareブロックでエンジンが使う初期コード

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

コードのto_prepareブロックに配置する必要があるの要求に再ロードあなたのエンジンからのコードが必要な場合は

関連する問題