2011-06-30 16 views
1

MongoDBでRailsを設定していて、config/mongo.ymlファイルをパージするときに奇妙な問題が見つかりました。 YAML設定ファイルをRailsにロードするときにエラーが発生する

config/mongo.yml

script/rails generate mongo_mapper:configを実行して生成し、それは次のようになりますされます。configファイルから

defaults: &defaults 
    host: 127.0.0.1 
    port: 27017 

development: 
    <<: *defaults 
    database: tc_web_development 

test: 
    <<: *defaults 
    database: tc_web_test 

我々はdevelopmenttestは両方databaseフィールドを持つべきであるオブジェクトを見ることができます。 puts config.inspectの出力はdatabase属性が含まれていません

{"defaults"=>{"host"=>"127.0.0.1", "port"=>27017}, "development"=>{"host"=>"127.0.0.1", "port"=>27017}, "test"=>{"host"=>"127.0.0.1", "port"=>27017}} 

次のとおりです。しかし、それは

config = YAML::load(File.read(Rails.root.join('config/mongo.yml'))) 
puts config.inspect 
MongoMapper.setup(config, Rails.env) 

奇妙なことが来て、解析され、config/initializers/mongo.dbにロードされたとき。しかし、普通のルビーコンソールで同じ文を実行すると、rails consoleの代わりにmongo.ymlが正しく解析されます。

{"defaults"=>{"host"=>"127.0.0.1", "port"=>27017}, "development"=>{"host"=>"127.0.0.1", "port"=>27017, "database"=>"tc_web_development"}, "test"=>{"host"=>"127.0.0.1", "port"=>27017, "database"=>"tc_web_test"}} 

この問題の原因は何ですか?何か案は?ありがとう。

答えて

1

同様の質問がすでにシステムに応じて、here

1

に答えてきた、Rubyは古いSyckパーサを置き換えPsychサポートでコンパイルされた可能性があります。表示されている問題(デフォルトで「乾燥」yamlファイルのみを使用すること)は、すでにPsychに修正されていますが、まだリリースされているRubyバージョンには含まれていません。今の

、あなたはあなたのboot.rbの終わりにこれを置くことによって代わりサイコのはSyckを使用するためにYAMLパーサーを強制することができますいずれか(しかし、注意してください - ルビーの将来のバージョンでは、もはやはSyckが含まれません):

YAML::ENGINE.yamler = 'syck' 

または、DRY以外のYAMLファイル(デフォルトなし)を当面使用することができます。

関連する問題