Heroku / Rails:PG :: Undefined Table:错误“[tablename]”在heroku rails迁移上不存在

Posted

技术标签:

【中文标题】Heroku / Rails:PG :: Undefined Table:错误“[tablename]”在heroku rails迁移上不存在【英文标题】:Heroku/Rails: PG:: Undefined Table: error "[tablename]" does not exist on heroku rails migration 【发布时间】:2016-09-04 19:04:27 【问题描述】:

我的应用在生产环境中运行良好,但是当我转移到生产环境并运行“heroku run rake db:migrate”时,我收到以下错误:

    PG::UndefinedTable: ERROR:  table "applications" does not exist
    Migrating to DropApplications (20160509013805)
        (0.8ms)  BEGIN
    == 20160509013805 DropApplications: migrating             =================================
    -- drop_table(:applications)
       (1.1ms)  DROP TABLE "applications"
        (0.5ms)  ROLLBACK
    rake aborted!
     StandardError: An error has occurred, this and all later migrations    canceled:

     PG::UndefinedTable: ERROR:  table "applications" does not exist
   : DROP TABLE "applications"

但是,我的数据库中有一个“应用程序”表。下降可能与前几天我下降然后重新制作应用程序支架有关。我该如何解决这个问题?

      create_table "applications", force: :cascade do |t|
t.string   "name"
t.string   "gender"
t.date     "date_of_birth"
t.string   "gpa"
t.text     "essay"
t.datetime "created_at",    null: false
t.datetime "updated_at",    null: false
      end

所以当我运行 run rake:db setup 时,我会看到以下结果:

      Status   Migration ID    Migration Name
    --------------------------------------------------
       up     20160505200754  ********** NO FILE **********
       up     20160508234634  Create users
      up     20160508234945  Add devise to users
       up     20160509013805  ********** NO FILE **********
       up     20160509014328  ********** NO FILE **********
        20160509014911  Create applications

我试图删除“创建应用程序”之前的两个。所以,我尝试像这样耙heroku db: $ heroku run rake --trace db:migrate VERSION=20151127134901 但我仍然收到“删除表”的错误 - 它试图进行 20160509013805 迁移。如何在它说没有文件的地方完全删除那些迁移,这样它也不会尝试耙那些?提前谢谢你。

【问题讨论】:

这有帮助吗? ***.com/a/34321825/981616 这有助于并让我走上正轨……我想。我刚刚更新了原始帖子,如果可以的话,请看一下 添加了答案,请检查并告诉我。 【参考方案1】:

我遇到了这个问题,但我只需要运行 heroku run rake db:migrate,因为自从上次推送到 Heroku 后我已经更改了我的数据库。

【讨论】:

【参考方案2】:

重置heroku db:

Heroku 不允许删除 db。相反,您应该使用heroku pg:reset。此命令需要您指定heroku pg:info, 可以找到的DATABASE,然后您将获得如下输出:

=== DATABASE_URL
Plan:        Hobby-dev
Status:      Available
Connections: 0/20
PG Version:  9.4.4
Created:     2015-10-11 23:14 UTC
Data Size:   6.7 MB
Tables:      5
Rows:        0/10000 (In compliance)
Fork/Follow: Unsupported
Rollback:    Unsupported
Add-on:      postgresql-cubed-1838

一旦你得到像上面这样的输出,使用 heroku pg:reset 命令并附加“附加”字段值。示例我会这样做:

$ heroku pg:reset postgresql-cubed-1838

【讨论】:

【参考方案3】:

您的迁移文件可能存在问题。如果您删除了一个但另一个相应的文件仍然存在,则可能会导致此错误。我会发表评论,但我还没有声誉。

【讨论】:

那些是孤立的迁移。要解决它,您可以删除您的 db/migrate/ 文件夹(不要删除 schema.rb)并运行 rake db:schema:loadrake db:setup。或者有一个宝石,但我从未尝试过:github.com/jalkoby/squasher 您也可以检查这个 SO 问题:***.com/questions/16041790/… 实际上你的孤立迁移问题现在已经解决了。但是您没有有权创建数据库的用户。 PG 设置不正确,无法继续。根据您的环境,不同解决方案的常见问题是,如果需要,您可能必须向database.yml 提供您的用户名和密码(将其隐藏在环境变量中)。有关解决方案示例,请参阅 ***.com/questions/11919391/… 和 ***.com/questions/17633422/…。 好的,所以我重新安装了 postgresl,但它仍然说该角色不存在。如何创建新角色?然后如果我在我的计算机上创建一个新角色,我是否会将它放在我的 database.yml 文件中? 您应该在database.yml 中为您的数据库添加一个“用户名”行。至于创建用户,这取决于你是在 Mac,Windows 上......我鼓励你浏览 SO,有可靠的答案。在您的机器上设置 pg 是一项重要任务,您可能还需要调整更多配置。 好的,我使用您所关注的链接更改了 postgresql 密码,现在我又回到了第一阶段,遇到了推送到 heroku 的麻烦(说已删除的迁移不存在),这比在我什至无法进行生产之前。我会继续工作。谢谢!

以上是关于Heroku / Rails:PG :: Undefined Table:错误“[tablename]”在heroku rails迁移上不存在的主要内容,如果未能解决你的问题,请参考以下文章

在heroku上成功部署后Rails应用程序无法正常工作?

出现错误 - PG::UndefinedColumn(错误:使用 postgres 版本 13.3 的 heroku 上不存在列 d.adsrc

PG::UndefinedTable: 错误: 关系“...”不存在

AWS Elastic Beanstalk 和 rails:pg_restore: [archiver] 文件头中不支持的版本 (1.13)

Postgresql错误,“没有pg_hba.conf条目”

部署到Heroku:NoMethodError:nil:NilClass的未定义方法'+'