PGError:错误:当我使用heroku db:push时,关系“schema_migrations”不存在

时间:2012-02-13 04:08:48

标签: ruby-on-rails database postgresql heroku

我的本​​地系统上有一个PostGresql数据库。我在开发过程中使用它,我试图在Heroku系统上测试它。

注意我正在使用PostGresql,以便我可以使用模式。

我在本地系统上完美运行系统。

我转到Heroku页面,了解如何将我的数据库推送到服务器。 http://devcenter.heroku.com/articles/taps

> heroku db:push

大约5分钟后我得到

"PGError: ERROR:  relation "schema_migrations" does not exist"

我想知道的是两折...... 在较小的层面上,我想知道为什么会这样。我的数据库是从头开始重建的吗? 在一个主要方面,我想知道如何解决这个问题。

简介:如何绕过db上的缺失表:推送?


解决在给出的答案中表达的担忧。

W:\RUBY\EDM>heroku run rake db:create
Running rake db:create attached to terminal... up, run.1
kzcgkswrss already exists

W:\RUBY\EDM>heroku run rake db:migrate
Running rake db:migrate attached to terminal... up, run.1

W:\RUBY\EDM>heroku db:push
Loaded Taps v0.3.23
Auto-detected local database: postgres://postgres:password@127.0.0.1/EDM2_develo
pment?encoding=utf8
Warning: Data in the app 'xxxx' will be overwritten and will not be r
ecoverable.

 !    WARNING: Potentially Destructive Action
 !     This command will affect the app: xxxx
 !    To proceed, type "xxxx" or re-run this command with --confirm c
xxxx

> xxxxx

Sending schema
Schema:        100% |==========================================| Time: 00:01:56
Sending indexes
schema_migrat: 100% |==========================================| Time: 00:00:01
....
users:         100% |==========================================| Time: 00:00:02
Sending data
31 tables, 5 records
schema_migrat:   0% |                                          | ETA:  --:--:--
Saving session to push_201202150351.dat..
!!! Caught Server Exception
HTTP CODE: 500
Taps Server Error: PGError: ERROR:  relation "schema_migrations" does not exist

编辑2

这个错误似乎与postGresql中存在的第二个架构有关。 看起来它推动了公共中的所有空表,但是一旦它试图推高第二个模式,它就失败了..

2 个答案:

答案 0 :(得分:1)

尝试

 heroku rake db:push

或许如果这不起作用,请

 heroku rake db:migrate

首先,然后尝试第二个。

由于您尚未在Heroku上创建表格,因此您正在获取丢失的表格。您需要创建数据库并运行迁移。是的,这将创建一个新的数据库。

更新:

引用Daniel Vandersluis(来自this link):

  

使用rails迁移时,会自动创建一个名为schema_migrations的表,通过存储每次迁移的版本号(这是在文件名中作为迁移名称前面的数字,跟踪已应用的迁移)。即db / migrate / _20090617111204__migration.rb)。运行rake db:migrate以进行迁移时,只会运行之前未运行的迁移(即表中未包含其版本)(因此,更改已执行的迁移)运行db:migrate时无效。向下迁移时,schema_migrations中找到的所有版本都将大于您回滚的版本。

答案 1 :(得分:0)

你是否在heroku上运行了迁移?

    <globalization fileEncoding="utf-8" 
                requestEncoding="utf-8" 
                responseEncoding="utf-8" 
                culture="de-DE" uiCulture="de-DE" />

如果你没有那么可能那就是它