2009-05-30 10 views
0

ステージング環境または運用環境でRailsアプリケーションがクラスをキャッシュするように設定されているという問題に直面しています。 load_pathsには 'app/models'しか含まれていませんが、初期化ステップでは 'app/models'のすべてを再帰的にキャッシュしているようです。クラスEager Loadのサブディレクトリを除外

# Eager load application classes 
    def load_application_classes 
    if configuration.cache_classes 
     configuration.eager_load_paths.each do |load_path| 
     matcher = /\A#{Regexp.escape(load_path)}(.*)\.rb\Z/ 
     Dir.glob("#{load_path}/**/*.rb").sort.each do |file| 
      require_dependency file.sub(matcher, '\1') 
     end 
     end 
    end 
    end 

この問題は、我々は、同時JRubyの環境を参照するステートメントを必要とファイルが含まれている「アプリ/モデルの内のサブディレクトリを持っていることです。 Railsはこの環境を何も知らないので、アプリケーションは負荷がかかりません。

残念ながら#1だけが理想的です。

1)最も簡単な解決策は、犯人サブディレクトリを除外することですが、これを達成する方法は何も見つかりませんでした。

2)Monkeyはload_application_classesメソッドをパッチして、特定のサブディレクトリをスキップします。

3) 'app/models'の下のサブディレクトリを移動します。ちょっとハッキリしていて、かなりのコード変更が必要になります。

思考?

答えて

1

一時的な対策として、オプション2のバージョンを使用してload_application_classesの定義を上書きし、空の実装に置き換えることができます。それはあなたが必要とするクラスを明示的に要求することを余儀なくされますが、ロードされるものを完全に制御し、完全に透明な解決策になります。

あなたのアプリケーションは、Railsフレームワークを超えて成長しているほど洗練されているようです。私はこれがあなたの質問に直接答えるわけではないことを知っています。しかし、Merbのような別のRubyフレームワークを検討することを検討したいかもしれません。 Railsは素晴らしいですが、遅かれ早かれフレームワークの端にぶつかります。あなたが今どこにいるかのように聞こえます。

私たちは昨年Merbに切り替わり、それを後悔していません。

クリス

関連する問題