1

我最近提取了一些代码并运行了 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 server 时,我收到以下错误:

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' 后缀的数据库. 这个“.admins”后缀是从哪里来的,我该如何删除它?

4

4 回答 4

2

app_test 和 app_dev 是数据库名称。

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

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

rake db:create
rake db:migrate

或者

rake db:schema:load
于 2013-07-31T02:39:16.577 回答
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-风格

于 2013-07-31T17:53:00.003 回答
0

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

于 2013-07-30T22:20:15.040 回答
0

是否有可能您rails-settings-cached的配置为使用admin表?你还记得打字rails g settings admin吗?

签入您的模型以获取 admin.rb 文件,或从RailsSettings::CachedSettings

检查你的初始化器是否有相同的 gem

于 2013-07-30T22:39:47.187 回答