使用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名称
答案 0 :(得分:1)
rake db:reset
不更新架构文件,它只是重新应用它并运行种子,更新架构文件的唯一命令是(据我所知)rake db:migrate
和rake db:rollback
在删除/恢复迁移文件之前,您应该已经运行rake db:rollback
,如果要修复此问题,可以检出旧的迁移文件,回滚然后再将其删除。