2015-02-07 56 views
0

使用Rails 4,我添加了一个迁移,带来我的架构的最高版本为轨架构版本并不能反映最新的迁移

我决定,我不再需要这种迁移和恢复我所有的变化由取出并检查背出主分支 -

,但我发现,运行rake db:reset; rake db:migrate当schema.rb版本仍然设置为我的不存在迁移,版本,与旧的(和不存在的)迁移仍在我的模式上生效。

我错过了什么?为什么旧迁移即使不存在,在db重置+迁移后仍然会产生影响?在模式号

$ 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,其中零是未来通过该数据库名

回答

1

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

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

+0

我意识到这一点 - 我重置并运行迁移,我编辑我的问题,包括这一点。作为迁移文件不再存在,它在一个单独的分支, - 因为我重置,这将下降并设置数据库 - 然后我可以重新运行迁移。但不存在的迁移仍然生效 – lfender6445 2015-02-07 21:06:59

+0

运行第二个'rake db:migrate'将不会执行任何操作,因为'schema.rb'中的模式版本已经晚于最新的迁移文件'rake db:迁移只增加版本,它不能减少它。 – 2015-02-07 21:10:04

+0

如果我重置并迁移,不应该我的模式有最新的迁移作为版本号? – lfender6445 2015-02-07 21:11:45