Railsエンジンに次のようなモンキーパッチを適用しています:
SomeClass.class_eval do
# ...
end
初めて Web サイトにアクセスしたときは、少なくとも開発モードでは機能しましたが、2 回目はパッチが存在しなかったようです。エンジン(ベンダー/にインストールされている)を自動リロードし、コードをリロードしないのはRailsだと思います。これは Rails 2.3 です。
私のコードもリロードされるようにする方法はありますか?
Railsエンジンに次のようなモンキーパッチを適用しています:
SomeClass.class_eval do
# ...
end
初めて Web サイトにアクセスしたときは、少なくとも開発モードでは機能しましたが、2 回目はパッチが存在しなかったようです。エンジン(ベンダー/にインストールされている)を自動リロードし、コードをリロードしないのはRailsだと思います。これは Rails 2.3 です。
私のコードもリロードされるようにする方法はありますか?
編集: このソリューションは、Rails::Railtie の一部の機能に依存しているため、Rails 3+ でのみ機能します。このコードを初期化子に入れます。
この質問はかなり古いですが、私が見つけた解決策は次のとおりです。
Rails.configuration.to_prepare do
SomeClass.class_eval do
# ...
end
end
これにより、Rails は開発モードではリクエストごとにクラスをリロードしますが、本番環境では 1 回だけです。
/config/initializers 内の任意の .rb ファイルにパッチを配置すると、動作するはずです。
醜いですが、この種のコードをenvironments.rbの下部に配置すると、起動時に常に正しいロード順序が保証されることがわかりました。
残念ながら、Rails 2.x のリロード メカニズムにフックする方法はありません。あなたができることは、パッチを app または lib ディレクトリのどこかに置くことです。(lib/core_ext
おそらく好ましい場所です)。次に、ディレクトリを設定の autoload_paths に追加します。
class_eval を使用するのではなく、クラスを開く必要がある場合もあります。