2015-06-14 115 views
2

我对rails迁移有一个奇怪的问题。 我的数据库/迁移文件夹包含迁移文件,一切正常。 但是刚才我用rails g migration MigrationName创建了一个新文件,它生成了一个新文件。然后当我运行了rake db:migrate它回滚所有和我的纲要版本变为0. 现在,当我运行rake db:migrate它什么都不做,而db/migrate包含我所有的迁移。 我试过rake db:reset db:drop db:create db:migrate但没有执行迁移。然而它说“迁移正在等待运行rake db:migrate RAILS_ENV = development”我徒劳地做了什么。Rails迁移问题Postgresql

我很困惑。有没有人有过这个问题?

我只是试着RAILS_ENV=development rake db:migrate --trace,它返回:

** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Invoke db:load_config (first_time) 
** Execute db:load_config 
** Execute db:migrate 
** Invoke db:_dump (first_time) 
** Execute db:_dump 
** Invoke db:schema:dump (first_time) 
** Invoke environment 
** Invoke db:load_config 
** Execute db:schema:dump 

运行:

rake db:migrate:status 

给我:

database: database_development 
Status Migration ID Migration Name 
-------------------------------------------------- 
up 000 ********** NO FILE ********** 
down 20150613120151 Devise create users 
down 20150613120734 Devise create admins 
down 20150614114949 Create gender 
down 20150614115642 Create events 
down 20150614142610 Create multi events 

我尝试了许多东西: - 我退学我的数据库,重新启动postgresql并再次运行rake db:setup db:migraterake db:migrate:status告诉我,迁移正在等待,但它不会迁移。 这让我疯了...

编辑 我手动更新数据库schema_migrations添加时间戳 模式:负荷工作,但是当我运行耙分贝:迁移到检查其所有的好,它rolledback ..

编辑 如果我手动填写schema_migrations版本数据库的时间戳,当我这样做rake db:schema:status他们都到了,我的新移民到了,但如果我这样做rake db:migrate它试图恢复,如果我想跑rake db:rollback

+0

你好,谢谢你的帮助。我不知道这是什么000迁移。我也不明白。我试图在我的本地机器上使用生产环境进行迁移。 – stacker

+0

我会试试这个。但是,这个000迁移来每次运行耙db:创建 – stacker

+0

好吧,看来正常Rails生成这个'000'文件,然后你运行'db:create'。 – Casper

回答

0

我不确定这会起作用,但你能请再次尝试下面的东西,

首先,删除表

rake db:drop 

二,删除/删除db/schema.rb文件

三,创建数据库

rake db:create 

四,运行迁移

rake db:migrate 

请让我知道如果这有助于你,祝你好运:)

+0

帮助的第一个thx没有。什么*。 – stacker

1

所以我解决了我的问题。 事实上,我使用dotenv来管理开发的环境变量,而在我的.env文件中,我定义了一个名为VERSION的变量来描述API版本... 这就是错误! 当我删除它时,耙子能够按预期迁移。

+0

我有同样的问题!谢谢你为我节省了一些时间。 – Rimian