7

モデルやコントローラーボックスにうまく収まらないRailsコードがいくつかあります。したがって、この回答に従って、app/classesディレクトリを作成しました。Rails 3はこれをRailsの「ロードパス」に自動的に追加するようで、私のアプリケーションはrequireステートメントを使用せずにそこで定義したクラスを正しく見つけます。

ただし、のコードはapp/classes開発モードでは再ロードされません。変更を加えた場合、その変更を確認するにはサーバーを再起動する必要があります。

Rails 3.2.xで特定のディレクトリを「リロード可能」にする適切な方法は何ですか?ここでのいくつかの回答は、次のことを推奨しています。

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

app/classesしかし、これは単にコードを見つけるためのディレクトリの初期セットに追加する効果があると私は信じています。リクエストごとにリロード可能にするようには見えません(さらに3.xではapp/*自動的に追加されるようです)。

更新

数字、私は質問を投稿してからわずか30秒後に解決策に出くわしました:

クラスをモジュールにラップしました。周囲の「MyModule」を削除すると、突然リロード可能になりました。Javaのバックグラウンドから来て、グローバル名前空間を汚染するRubyコードによって焼き付けられたので、私はすべてをモジュール内に置く習慣を身につけました。Railsの「アプリ」コードはモジュールの外に存在する必要があると思いますか?

4

1 に答える 1

2

モジュールを別のファイルで宣言しましたか、それともクラス内で暗黙的に宣言しましたか? これは、オートロードの動作に影響を与える可能性があります。module Foo; class Barclass Foo::Bar。Rails オートローダが Foo モジュールに対応する を見つけられない場合、foo.rbリロードをスキップする可能性があります。

于 2012-07-13T15:09:14.183 に答える