【问题标题】:Error when loading YAML config files in Rails [duplicate]在 Rails 中加载 YAML 配置文件时出错 [重复]
【发布时间】:2023-04-09 20:43:01
【问题描述】:

我正在用 MongoDB 配置 Rails,在解析 config/mongo.yml 文件时发现了一个奇怪的问题。

config/mongo.yml是通过执行script/rails generate mongo_mapper:config生成的,如下所示:

defaults: &defaults
  host: 127.0.0.1
  port: 27017

development:
  <<: *defaults
  database: tc_web_development

test:
  <<: *defaults
  database: tc_web_test

从配置文件中我们可以看到对象developmenttest 都应该有一个database 字段。但是在config/initializers/mongo.db中解析加载的时候,

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

奇怪的事情来了:puts config.inspect的输出是

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

其中不包含database 属性。但是当我在普通的 ruby​​ 控制台中执行相同的语句时,而不是使用 rails consolemongo.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"}}

我想知道这个问题的原因可能是什么。有任何想法吗?谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby yaml mongodb


    【解决方案1】:

    根据您的系统,Ruby 可能在编译时使用了Psych 支持,它取代了旧的Syck 解析器。您看到的问题(仅涉及使用具有默认值的“干”yaml 文件)已在 Psych 中修复,但尚未在发布的 Ruby 版本中。

    现在,您可以强制 YAML 解析器使用 Syck 而不是 Psych,方法是将其放在 boot.rb 的末尾(但请注意——未来的 Ruby 版本将不再包含 Syck):

    YAML::ENGINE.yamler = 'syck'
    

    或者你可以暂时只使用一个非 DRY YAML 文件(没有默认值)。

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2016-01-08
      • 2020-09-30
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多