database.yml和引用无效

d11*_*wtq 8 ruby yaml ruby-on-rails datamapper

我们刚刚将虚拟机升级到我认为相同的ruby配置(通过RVM ...... Ruby 1.9.2,Rails 3.0.7,DataMapper 1.1.0).最大的区别是我们从MySQL 5.0到5.1.

出于某种原因,在我们的旧虚拟机上工作的完全相同的代码/ database.yml现在在我们尝试连接到数据库时的新代码上失败了.

问题是这个YAML:

mysql_defaults: &mysql_defaults
  adapter: mysql
  encoding: UTF-8
  username: user
  password: pass
  host: localhost

development:
  <<: *mysql_defaults
  database: devdb

production:
  <<: *mysql_defaults
  database: productiondb
  host: master.db.site.com
Run Code Online (Sandbox Code Playgroud)

只是扩展到:

  "mysql_defaults" => {
    "adapter"=>"mysql",
    "encoding"=>"UTF-8",
    "username"=>"user",
    "password"=>"pass",
    "host"=>"localhost"
  },
  "development" => {
    "adapter"=>"mysql",
    "encoding"=>"UTF-8",
    "username"=>"user",
    "password"=>"pass",
    "host"=>"localhost"
  },
  "production" => {
    "adapter"=>"mysql",
    "encoding"=>"UTF-8",
    "username"=>"user",
    "password"=>"pass",
    "host"=>"localhost"
  }
Run Code Online (Sandbox Code Playgroud)

代替:

  "mysql_defaults" => {
    "adapter"=>"mysql",
    "encoding"=>"UTF-8",
    "username"=>"user",
    "password"=>"pass",
    "host"=>"localhost"
  },
  "development" => {
    "adapter"=>"mysql",
    "encoding"=>"UTF-8",
    "username"=>"user",
    "password"=>"pass",
    "host"=>"localhost",
    "database"=>"devdb"
  },
  "production" => {
    "adapter"=>"mysql",
    "encoding"=>"UTF-8",
    "username"=>"user",
    "password"=>"pass",
    "host"=>"master.db.site.com",
    "database"=>"productiondb"
  }
Run Code Online (Sandbox Code Playgroud)

以前有人经历过吗?

根据Gemfile.lock(我删除它并再次运行bundle install,只是为了理智),所有已安装的依赖项都是相同的(即Gemfile.lock在旧设置和新设置之间不区分).database.yml也不是.

rub*_*ish 18

Psych是新的YAML解析器,它可能更好但不能合并散列键.

这应该有助于 http://pivotallabs.com/users/mkocher/blog/articles/1692-yaml-psych-and-ruby-1-9-2-p180-here-there-be-dragons

  • 哇,我在我的application.rb中放了`YAML :: ENGINE.yamler ='syck'`,一切都很好.他们究竟在想什么东西是默认的,如果它固有地破坏了?好像他们实际上完全删除了syck,但两者完全不相容的声音: - \ (7认同)