7

タイトルはそれをすべて言います。

これは、モデルまたは初期化子の変更に関するものではないことに注意してください。コントローラー (@user など) のインスタンス変数を削除してから、ビューをリロードすると、サーバーを再起動するまで機能します。サーバーを再起動すると、変数が nil であるというエラーが表示されます。

私は通常どおり作業していましたが、まったく異なる一連のコントローラーとビューで作業するように切り替えましたが、今では何の理由もなく起こっています。

アプリは開発環境にあります。

development.rb の内容:

Dashboard::Application.configure do
  config.cache_classes = false
  config.whiny_nils = true
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false
  config.action_mailer.raise_delivery_errors = false
  config.active_support.deprecation = :log
  config.action_dispatch.best_standards_support = :builtin
  config.assets.compress = false
  config.assets.debug = true
end

それがどのように起こっているかを知るにはどうすればよいですか、どうすれば修正できますか?

編集: **関連している可能性がありますが、dashboards_path などのパーシャルで「rake routes」を実行するときに存在するパスを使用できないようです**

プロット ツイスト: 追加

config.reload_classes_only_on_change = false

development.rb に変更すると、問題が改善されたようです。なぜそれが起こったのか、なぜそれが突然起こったのか、なぜ一方のコントローラーで起こったのにもう一方のコントローラーでは起こらなかったのかを知りたい.

4

1 に答える 1

1

Rails は自動ロード パス構成を使用して、自動ロードおよびリロードするファイルを決定します。

module YourApp
  class Application < Rails::Application
    config.autoload_paths += %W( #{config.root}/lib #{config.root}/lib/**/ #{config.root}/app/traits )

    ...

  end
end

ご覧のとおり、カスタム ディレクトリ app/traits ディレクトリを追加しました。このディレクトリには、共有動作を定義するいくつかのモジュールが保存されます。

作業を開始したコントローラーがレールによって監視されていないサブディレクトリにある場合、またはレールがファイルシステム変更イベントをアタッチするのを停止する権限がある場合、この問題が発生します。

問題を「解決」する理由config.reload_classes_only_on_change = falseは、ファイルへの変更の検出に依存するのではなく、リクエストごとにアプリ全体がリロードされるためです。

ほとんどの場合、コントローラーは監視対象ファイルのリストにないため、変更時にレールが再ロードされません。リストにない正確な理由はさまざまである可​​能性があり、適切な回答を得る前に、フォルダー構造とアプリの構成に関する詳細が必要です...

于 2013-02-06T11:13:34.603 に答える