2012-01-06 12 views
1

が...次の構造を持つRubyプロジェクトを仮定し、必要なクラス内のlib /プロジェクト/ myclass.rb以内ルビー:例に示すように

project/ 
|-- data 
| `-- data.yaml 
|-- lib 
| |-- project 
| | `-- myclass.rb 
| `-- project.rb 

をファイルパスの管理、私はデータ/ data.yamlをロード以下...

のlib/project.rb以内
def MyClass 
    data = YAML::load(File.open('../../data/data.yaml')) 
    # Other stuff.. 
end 

は、私はプロジェクト/ myclass.rbが含ま

project.rbが実行されている場合は、次のエラーがスローされます

...

これを回避するために
Errno::ENOENT: No such file or directory - ../../data/data.yaml 

、私はそれがルートまたはlibディレクトリに相対的であるようにmyclass.rbで使用するファイルのパスを更新する必要が...

../data/data.yaml 

が良くありますこれを処理する方法は?

答えて

1

あなたは、このようにデータをロードすることができます:それは、彼はあなたのコードを実行するときに、ユーザーの現在のディレクトリ上の要件を課しているので、あなたは現在、それをやっている

filename = File.join File.dirname(__FILE__), '..', '..', 'data', 'data.yaml' 
data = YAML::load File.open filename 

方法は一種の悪いです。

また、embed the YAML data at the end of your ruby file using the __END__ keywordとすることもできます。

+0

ありがとうございます!それは完璧に働いた。 –

関連する問題