0

私はフォーラムのような機能を提供する(質問、回答、コメントなどを追加する)レールアプリにマウント可能なエンジンを追加しています。すべてが開発でうまく動作します。ただし、ステージング/プロダクションでは、回答を作成しようとするとエラーが表示されます。具体的には、CanCan権限のエラーです(ただし、私は赤ん坊かもしれません)。しかし、名前空間や名前の衝突に関連するかもしれないと感じていますか?`cache_classes`を` false`に設定すると、私のバグが修正されます。次はどうする?

私の環境設定ファイルにconfig.cache_classes = falseを設定しても、問題は解決しません。しかし、それは本当に物事を遅くするので、容認できる解決策ではありません。

どこから行くのですか?どのクラスを再読み込みする必要があるのか​​、どうすればわかりますか?この問題に対処する従来の方法は何ですか?

私はRails 3.1を使用しています。

答えて

3

私は問題を把握しました。これは起動順序に問題がありました。私のEngine::AnswersControllerが私のEngine::ApplicationControllerの前にロードされていました。私のコードでは、私はちょうどApplicationControllerから継承していました。つまり、Engine::AnswerControllerEngine::ApplicationControllerを知らなかったので、エンジンのApplicationControllerではなく、メインアプリのApplicationControllerから誤って継承されていました。

修正プログラムは、エンジンの名前空間を明示的にすることではなく、メインのアプリよりもエンジンから継承する答えコントローラを強制することでした。私はこの問題は私のアプリケーションにかなり特有であることを理解

Engine::AnswersController < Engine::ApplicationController 

が、どのように私が到着解決策では他の人に役立つかもしれません。このタイプの問題に直面している場合は、いくつかの種類のデバッガ(私はPryを使用しました)に落として、検査を開始してください。具体的には、どのクラスがロードされているかを確認し、継承チェーン(すなわち、Engine::ApplicationController.ancestors)を厳しく見ます。奇妙に思われるものを探してください。

また、問題がエンジン関連の場合は、エンジンとメインアプリの両方にデバッガを配置する必要があります。エンジンで発生したエラーが必ずしもメインアプリケーションにバブルアップするとは限らないため、デバッグエンジンは難しいかもしれません。

tjbladezに感謝します。