10

application.rbには、

config.autoload_paths += %W(#{config.root}/lib 

そのため、lib の下のクラスを変更すると、コードがリロードされます。

しかし、config/initializers を autoload に追加しようとすると、コードが更新されないことに気付きました。

文字列クラスの拡張機能を作成している場合、コードを変更するたびに Rails を再起動する必要があります。

お知らせ下さい?

4

2 に答える 2

9

初期化子は、レールの開始時にのみロードされます (再ロードされることはありません)。いじくり回すときconfig/initializersは、毎回レールを再起動する必要があります。

もちろん、コードが定義され/libていることを確認して、テスト スイートを使用して動作することを確認することもできます。

たとえば、lib/speaker.rb書き込み中

module Speaker
  def speak
    puts "Ahum, listen: #{self.to_s}"
  end
end

そして、イニシャライザで次のようなことができます

class String
  include Speaker
end

これはレールの起動時にのみロードされますが、モジュールをより簡単に開発およびテストできます。

お役に立てれば。

于 2012-06-15T12:24:16.913 に答える
3

初期化ファイルは、レール サーバーの起動時に 1 回だけ読み込まれます。初期化子の値が変更されたときにサーバーを再起動します。詳細については、Rails初期化ガイドを参照してください。

変更時の「lib」の自動リロード

lib ファイルを自動リロードできます。Link Autoload に従って、変更時に lib ディレクトリをリロードします

Rails アプリケーションの構成:config.reload_classes_only_on_change追跡されたファイルが変更された場合にのみ、クラスのリロードを有効または無効にします。デフォルトでは、オートロード パス上のすべてを追跡し、true に設定されています。が true の場合config.cache_classes、このオプションは無視されます。

于 2015-02-16T13:56:25.323 に答える