我最近提取了一些代码并运行了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'后缀来自哪里,如何将其删除?
答案 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
派生的模型
检查你的初始化师是否也有同样的宝石