MissingSourceFile? Railsの動的ロードで対応

試行錯誤の結果、すべてのrequireをコメントアウトし、使用している独自のValueObjectクラスのnamespaceを明示的に修飾することで解決しました。

generateコマンドで生成される、コントローラやモデルクラスは自動的に名前空間が明示されますが、独自のValueObjectクラスには修飾がされていなかったためこれを明示するよう修正しました。考えてみればモデルクラスなんかはいちいちrequireせず使用しているわけですからもう少しはやく気がつくべきでした。こうすることでモデルクラスと同じように、requireせず使えるようになるみたいです。起動時にロードパスに組み込まれていないもの(今回のようにcomponents/xxx/xxxはまだ作成されていない)は完全なパスを指定してrequireするより、動的に実行時にロードしたほうが理にかなっているように思います。

こういった仕組みはRails(たぶんActiveSupportあたり?)がこなしているのでしょうけれどもスマート過ぎて(&不勉強で)その仕組みがよく見えてきません。規約さえ守れば後は楽チンというのはそのとおりなんですがいったんハマるとなかなか抜け出すのは難しいようで...

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/35

返信