2012-01-23 9 views
0

私はいくつかの共有アプリケーションのコードをリファクタリングしていますが、シンボリックリンクされたディレクトリで奇妙な問題が発生しています。基本的に、私のレールのアプリの私の古い構造は:レールがシンボリックリンクされたディレクトリを認識しない

RAILS_ROOT 
    -> app 
    -> config 
    -> initializers 
     -> common 
    ->lib 
    -> common 
    ... 

物事がうまく働いていた、とレールは共通のフォルダを認識し、そこにあるすべてのファイルをロードしました。

私は自分のレポにすべての一般的なものを移動し、それを私のレールアプリにサブモジュールすることに決めました。だから、新しいフォルダ構造は、何らかの理由で

RAILS_ROOT 
    -> app 
    -> config 
    -> initializers 
     -> common -> ../../shared/initializers/ 
    ->lib 
    -> common -> ../shared/lib/ 
    -> shared 
    -> initializers 
    -> lib 
    ... 
    ... 

のように見え、SYMリンクされたディレクトリ内のファイルのいずれもがロードされていない得ていると私はなぜわかりません。もし私がinitializersフォルダにtempディレクトリを作成し、いくつかの "共通の"ファイルをコピーすると、それらはうまくロードされるので、symリンクされているという事実と関係しているようです。

+0

それらを 'マウント - バインド 'するとどうなるか見てみましょう。 – Reactormonk

+0

私はOS Xで動いています(セントマシンにはデプロイしていますが)、バインドオプションがないようです。 OS X用のbindfsがありますが、いくつかの問題があると読んでいます。 – gmoniey

答えて

1

だから私は、レールソースに掘っ、および初期化子をロードするための次のコードを見つけました:

def load_application_initializers 
    if gems_dependencies_loaded 
    Dir["#{configuration.root_path}/config/initializers/**/*.rb"].sort.each do |initializer| 
     load(initializer) 
    end 
    end 
end 

そして、この質問に基づく:Can I traverse symlinked directories in Ruby with a "**" glob?そのコードはSYMのリンクをたどりませんように見えます。

は、この問題を回避するために、私は Rails::Initializer.runライン

module Rails 
    class Initializer 
    def load_application_initializers 
     if gems_dependencies_loaded 
     Dir["#{configuration.root_path}/config/initializers/**{,/*/**}/*.rb"].sort.each do |initializer| 
      load(initializer) 
     end 
     end 
    end 
    end 
end 

前に、次のモンキーパッチを入れてしまった。これは明らかにハックし、うまくいけば、私はこれを行うためのクリーンな方法を見つけることが、今のところ、それは解決私の問題。興味深いことに、プラグインとlibフォルダをロードするために使用されるコードはsymリンクに従います。

関連する問題