我是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
任何帮助将不胜感激。谢谢。
答案 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,所以我完全删除了默认情况并定义了个案,如你所见。对于一个人来说,当我非常绝望时给它一个机会是好的,我的意思是删除所有的默认案例