rails schema版本不反映最新的迁移

时间:2015-02-07 20:58:13

标签: ruby-on-rails

使用rails 4,我添加了迁移,将我的架构升级到版本 20150207205305

我决定不再需要这次迁移,并通过删除它并检查主分支来恢复我的所有更改 -

但是我发现在运行rake db:reset; rake db:migrate时,schema.rb版本仍设置为我不存在的迁移版本 20150207205305 ,旧的(并且不存在)迁移仍然生效在我的架构上。

我错过了什么?为什么旧的迁移,即使它不存在,仍然在db reset + migrate之后生效?

$ rm -f db/schema.rb
$ be rake db:drop; be rake db:create;
$ ls db/migrate/ 

20141222203059_create_posts.rb 
20141223152011_create_users.rb 
20150121231334_create_api_keys.rb 
20150121235406_drop_user_password_and_add_password_digest.rb 
20150204032843_create_carts.rb 
20150204032904_create_categories.rb 
20150204033026_create_customers.rb 
20150204033441_create_items.rb 
20150204033614_create_sales.rb 
20150204033708_create_shows.rb 
20150204034028_create_venues.rb

$ be rake db:migrate
$ be rake db:migrate:status

database:

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20141222203059  Create posts
   up     20141223152011  Create users
   up     20150121231334  Create api keys
   up     20150121235406  Drop user password and add password digest
   up     20150204032843  Create carts
   up     20150204032904  Create categories
   up     20150204033026  Create customers
   up     20150204033441  Create items
   up     20150204033614  Create sales
   up     20150204033708  Create shows
   up     20150204034028  Create venues
   up     20150207195208  ********** NO FILE **********
   up     20150207200152  ********** NO FILE **********
   up     20150207205305  ********** NO FILE **********

注意架构号的差异:

$ git diff db/schema.rb
-ActiveRecord::Schema.define(version: 20150204034028) do 
+ActiveRecord::Schema.define(version: 20150207205305) do

更新/溶液 我们能够将其追溯到无效的database.yml,其中nil通过了db名称

1 个答案:

答案 0 :(得分:1)

rake db:reset不更新架构文件,它只是重新应用它并运行种子,更新架构文件的唯一命令是(据我所知)rake db:migraterake db:rollback

在删除/恢复迁移文件之前,您应该已经运行rake db:rollback,如果要修复此问题,可以检出旧的迁移文件,回滚然后再将其删除。