2009-03-21 6 views
2

Rails生成スクリプトで、適切な名前のファイルのプラグインパスを検索してジェネレータを見つける問題が発生しました。私のシステムの一つで、私はRubyはc:\dev\rubyにインストールされていると、それは間の相対パスを見つけようとするとき、この設定にチョーク(Railsのジェネレータスクリプトによって呼び出される)d:\local\projectsWindowsでのRuby relative_path_from呼び出し

ルビーPathname#relative_path_from方法で私のプロジェクトのディレクトリを持っていますc:\d:\ ...

relative_path_fromとWindowsで複数のドライブを使用している人は誰ですか?レールジェネレータスクリプトの回避策はありますか?ここで

はIRBからのサンプルです:

>> x = Pathname.new('c:/dev/ruby') 
=> #<Pathname:c:/dev/ruby> 
>> y = Pathname.new('d:/local/projects') 
=> #<Pathname:d:/local/projects> 
>> x.relative_path_from(y) 
ArgumentError: different prefix: "c:/" and "d:/local/projects" 
     from c:/dev/ruby/lib/ruby/1.8/pathname.rb:709:in `relative_path_from' 
     from (irb)... 

何の解決策はありません場合は、私はいつも私のRubyをインストールしてください可能性があり、プロジェクトのディレクトリが同じドライブ上にあるが、それは今までにプロジェクトを離れて働いてから私を妨げますディレクトリにある...

UPDATE:この問題は、Radiant CMSがRailsの設定変数に与える変更に関連しています。この変更により、プロジェクトに追加のプラグインディレクトリが追加されます。プラグインディレクトリのいくつかは、ドライブの境界を越えることができます。 Railsのジェネレータコードは、そのようなドライブジャンプを想定していないので、ジェネレータはコンピュータ上でブレークします...

+0

私はrefinerycmsでsimilaarの問題を抱えていますが、configがどこにあるのかわかりません。助言がありますか? – Paul

+0

私も同じ問題に直面していましたが、私のプロジェクトフォルダをC:\に入れて解決しました。ですから、時間を置いてこのソリューションを使うことができれば幸いです。 – vicky

答えて

2

Windowsの2つの異なるドライブ間の相対パスを計算する方法はありますか?知りません。

D:ドライブをC:ドライブのフォルダとしてマウントすることで、NTFSを使用していることを前提として問題を回避できます。それが受け入れられない場合は、D:\localからC:\localへのジャンクションを作成すると、とC:の両方からD:\localにアクセスできます。その後、同じスクリプトをC:ドライブから実行すると問題は発生しません。

+0

私はジャンクションを設定することさえ考えていませんでした。私は既にシステムにjunction.exeを持っていました... 残念ながら、問題は私が実現したよりも少し複雑だったので、単にプロジェクトディレクトリにジャンクしても問題は解決しませんでした。 .. –

0

問題は、Windows上でhttp://redmine.ruby-lang.org/issues/show/1366

でチケットに記載されているように、ドライブ文字の場合は大文字のいずれかになります。このです異なるコマンドプロンプトウィンドウ(「C:」または「c:」など)を同じマシン上で同時に使用することもできます 詳細については)。 Dir.pwdは、実行されるコマンドプロンプトに応じて、ドライブ文字( "C:/"または "c:/")の小文字または大文字のいずれかを返します。ただし、FILEは、常に小文字のドライブ文字を使用します。これにより、Pathname#relative_path_fromを使用してDir.pwdとFILEを比較するとArgumentErrorが発生する可能性があります。これはバージョン1.9.1p0でも発生します。 Pathname#relative_path_fromは、引数の大文字と小文字が異なる場合に対処する必要があります。

私はrubyインストールフォルダとプロジェクトフォルダをc:ドライブに持っていますが、まだエラーが表示されます。 pathname.rbファイルに以下の行を2つのアスタリスクでマークされているように猿でパッチしました。パッチを当てるときに2つのアスタリスクを削除します。

def relative_path_from(base_directory) 
    dest_directory = self.cleanpath.to_s.**capitalize!** 
    base_directory = base_directory.cleanpath.to_s.**capitalize!** 
    ... 

パッチの後で動作します。それが役に立てば幸い。

関連する問題