无法加载`Rails.application.database_configuration`:未知别名:默认

时间:2014-07-24 15:24:13

标签: ruby-on-rails

我是Ruby on Rails的新手,我猜我的问题的答案非常简单,但我无法找到它。我最近创建了一个项目并使用了#34; rails generate scaffold ..."一切都很好。我想在数据库中添加另一列,所以我使用" rails生成迁移...."这之后一切都很顺利。我停止服务器并重新启动它后,问题就出现了。现在我收到了这个错误 迷幻:: BadAlias 无法加载Rails.application.database_configuration:未知别名:默认

我发现了Requesting a ruby-on-rails application gives Psych::BadAlias error,但我没有看到明确的答案。

这是我的database.yml文件的样子......

  #  

  <<: *default 
    database: db/development.sqlite3 


  test:
    <<: *default
    database: db/development.sqlite3_test

  production:
    <<: *default  
    database: db/development.sqlite3_production 

这是我进行迁移后生成的文件

class AddHardwareToComputers < ActiveRecord::Migration
  def change
    add_column :computers, :hardware, :string
  end
end

这是我的schema.rb

ActiveRecord::Schema.define(version: 20140723203054) do  

  create_table "computers", force: true do |t|
    t.string   "name"
    t.string   "serial_number"
    t.string   "user"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "hardware" 
  end

end

任何帮助将不胜感激。谢谢。

4 个答案:

答案 0 :(得分:3)

您的yaml文件应包含默认配置,如下所示

defaults: &defaults
  adapter: mysql2
  encoding: utf8

development:
  <<: *defaults
  database: app_development

test:
  <<: *defaults
  database: app_test

答案 1 :(得分:3)

我知道这是一个老问题,但我正在寻找相同的问题并使用jvnill的+ CocoHot的建议进行小的修正来解决它。我没有足够的评论意见,因此我将修改后的解决方案添加为新答案。

首先,将&defaults更改为&default(单数);第二,既然您正在使用sqlite3(就像我一样),请将适配器mysql2替换为sqlite3

defaults: &default
  adapter: sqlite3
  encoding: utf8

development:
  <<: *default
  database: db/development.sqlite3

test:
  <<: *default
  database: db/development.sqlite3_test

production:
  <<: *default
  database: db/development.sqlite3_production

答案 2 :(得分:2)

jvnill指出了正确的道路

您只需将其更改为default: &default而不是defaults: &defaults,您应该做得很好。

答案 3 :(得分:2)

我发现了一个不同的案例,实际上我将旧代码与openshift的新代码合并。它在database.yml文件中生成了两个默认值和两个开发模式。我刚刚删除了重复项,并使我的Yaml文件如下所示。它起作用了 (我为了参考而粘贴了我的yaml文件)

development:
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: admin
  database: abc
  timeout: 5000

production:  
  adapter: mysql2
  database: <%=ENV['OPENSHIFT_APP_NAME']%>
  username: <%=ENV['OPENSHIFT_MYSQL_DB_USERNAME']%>
  password: <%=ENV['OPENSHIFT_MYSQL_DB_PASSWORD']%>
  host:     <%=ENV['OPENSHIFT_MYSQL_DB_HOST']%>
  port:     <%=ENV['OPENSHIFT_MYSQL_DB_PORT']%>
  min_messages: ERROR
  reconnect: false

由于我的两个环境都需要不同的confs,所以我完全删除了默认情况并定义了个案,如你所见。对于一个人来说,当我非常绝望时给它一个机会是好的,我的意思是删除所有的默认案例