Rails正在寻找未由database.yml指定的数据库

时间:2013-07-30 22:02:31

标签: mysql ruby-on-rails activerecord devise

我最近提取了一些代码并运行了rspec。测试通过没有问题。当我运行“rake db:migrate”和“rake db:prepare”时,我遇到了一个问题。

现在没有通过rspec测试,每次失败都会引用相同的错误:

Mysql2::Error: Table 'app_test.admins' doesn't exist: SHOW FULL FIELDS FROM `admins`

问题是,在代码中的任何地方都没有指定数据库名称。在database.yml中,指定了'app_test',没有'.admins'后缀。

同样,当我运行rails服务器时,我收到以下错误:

Mysql2::Error: Table 'app_dev.admins' doesn't exist: SHOW FULL FIELDS FROM `admins`

仅在yml中指定了'app_dev'。

rake命令(db:migrate,db:test:prepare,db:create,db:drop等)都在修改database.yml指定的数据库,只是Rails正在寻找带有'的数据库。管理员的后缀。这个'.admins'后缀来自哪里,如何将其删除?

4 个答案:

答案 0 :(得分:2)

app_test和app_dev是数据库名称。

  

只是Rails正在寻找带有'.admins'的数据库   后缀。

实际上,app_test.admins和app_dev.admins是rails在两个数据库中寻找的表。我会尝试几种方法:

rake db:create
rake db:migrate

rake db:schema:load

答案 1 :(得分:2)

问题如下:

当我拉出代码时,无论出于何种原因,“管理员”表格从db/schema.rb消失了。无法通过rake:db:migrate恢复此表,因为创建它的迁移使用t.database_authenticatable,该版本已被弃用且不再适用于Devise gem。因为我们正在构建遗留代码,所以我们只对最近更改的迁移运行rake db:migrate,而不是从空数据库运行(对于空数据库,我们使用rake db:schema:load)。

由于db/schema.rb中缺少该表,即使我使用rake db:schema:load,也无法恢复。要解决此问题,我必须使用git reset恢复为db/schema.rb的旧版本。

要解决设计弃用问题,以便您可以运行所有迁移,请转到此处 - https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style

答案 2 :(得分:0)

rake db:准备一个有效的命令吗?你试过rake db:create:all吗?

答案 3 :(得分:0)

您的rails-settings-cached是否可以配置为使用admin表?你还记得输入rails g settings admin吗?

在模型中检查admin.rb文件,或从RailsSettings::CachedSettings派生的模型

检查你的初始化师是否也有同样的宝石