1

/lib にあるクラスをいじり、コンソール経由でテストしています。クラスに変更を加えて (たとえば、デバッガー行を追加して) 使用していますreload!が、新しい行または削除された行は、コンソールが実行しているコードのバージョンに反映されていません。

これらを試しました:

  • config.cache_classes = false
  • reload!
  • config.autoload_paths += Dir["#{config.root}/lib/**/"]

    config.autoload_paths += Dir["#{config.root}/lib/service_processors"]

    config.autoload_paths << 'lib'

クラスのインスタンスを作成する保存済みスクリプトを実行しています。スクリプトの先頭でクラスをロードしようとしましたが、意図しない結果が生じるようでした。

では、クラスを完全にアンロードしてから再ロードするにはどうすればよいでしょうか? 私は、スクリプトがクラスのアンロードを強制し、ファイル名を介してクラスをロードすると考えています。

4

2 に答える 2

1

それが問題かどうかはわかりませんがapplication.rb、次の行を追加する必要があります。

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

次に、リロード時にクラス/モジュールが正しく検出されるようにするために、命名は Rails の規則に従う必要があります。これは、モジュールまたはクラス名をスネークケースするとファイル名が得られ、異なる名前空間 (またはネスト) は異なるフォルダーにある必要があることを意味します。

これをより明確にするためのいくつかの例:)

class SomeClass     --> /lib/some_class.rb
class SomeHTTPStuff --> /lib/some_http_stuff.rb
class API::Stuff    --> /lib/api/stuff.rb

HTH。

于 2012-12-31T09:49:29.030 に答える
0

Railsタグ追加後無効

さて、クラスをロードするには:

load "lib/class.rb"

リロードするには:

load "lib/class.rb"

それらの設定は無関係です。

于 2012-12-28T17:15:13.583 に答える