【问题标题】:Cannot load `Rails.application.database_configuration`: Unknown alias: default无法加载“Rails.application.database_configuration”:未知别名:默认
【发布时间】:2014-09-16 06:04:28
【问题描述】:

我是 Ruby on Rails 的新手,我猜我的问题的答案很简单,但我找不到。我最近创建了一个项目并使用了“rails generate scaffold ...”,一切正常。我想在数据库中添加另一列,所以我使用了“rails generate migration ....”在此之后一切都运行良好。在我停止服务器并重新启动它之后,问题就开始了。现在我得到这个错误 心理::坏别名 无法加载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

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

    defaults: &default
      adapter: mysql2
      encoding: utf8
    
    development:
      <<: *default
      database: app_development
    
    test:
      <<: *default
      database: app_test
    

    编辑:2020 年 4 月 22 日

    • defaults 更改为 default 以减少混乱。

    【讨论】:

    • 我将建议添加到我的 .yml 文件中,但它没有解决问题。我使用 sqlite3 会有所不同吗?
    • 是的,我遇到了同样的错误。我什至更改了我的 .yml 文件,使其看起来像您的建议。
    • 这绝对很奇怪。我 100% 确定错误指向默认指针的缺失地址。确保您正在修改正确的文件。
    【解决方案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
    

    由于我的两个环境都需要不同的配置,所以我完全删除了默认情况并定义了个别情况,如您所见。有人在非常绝望的时候试一试会很好,我的意思是完全删除默认情况

    【讨论】:

      【解决方案3】:

      我知道这是一个老问题,但我一直在寻找同样的问题,并使用 jvnill 的 + CocoHot 的建议和一个小的修正来解决它。我没有足够的评论点,所以我将修改后的解决方案添加为新答案。

      首先,将&amp;defaults改为&amp;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
      

      【讨论】:

        【解决方案4】:

        jvnill 在正确路径上的点

        您只需将其更改为 default: &amp;default 而不是 defaults: &amp;defaults 就可以了。

        【讨论】:

        • 这是什么原因?
        猜你喜欢
        • 1970-01-01
        • 2015-11-11
        • 2022-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多