【问题标题】:Heroku/Rails: PG:: Undefined Table: error "[tablename]" does not exist on heroku rails migrationHeroku / Rails:PG :: Undefined Table:错误“[tablename]”在heroku rails迁移上不存在
【发布时间】: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 迁移。如何在它说没有文件的地方完全删除那些迁移,这样它也不会尝试耙那些?提前谢谢你。

【问题讨论】:

  • 这有助于并让我走上正轨……我想。我刚刚更新了原始帖子,如果可以的话,请看一下
  • 添加了答案,请检查并告诉我。

标签: ruby-on-rails ruby postgresql heroku database-migration


【解决方案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 问题:stackoverflow.com/questions/16041790/…
      • 实际上你的孤立迁移问题现在已经解决了。但是您没有有权创建数据库的用户。 PG 设置不正确,无法继续。根据您的环境,不同解决方案的常见问题是,如果需要,您可能必须向database.yml 提供您的用户名和密码(将其隐藏在环境变量中)。有关解决方案示例,请参阅 stackoverflow.com/questions/11919391/…stackoverflow.com/questions/17633422/…
      • 好的,所以我重新安装了 postgresl,但它仍然说该角色不存在。如何创建新角色?然后如果我在我的计算机上创建一个新角色,我是否会将它放在我的 database.yml 文件中?
      • 您应该在database.yml 中为您的数据库添加一个“用户名”行。至于创建用户,这取决于你是在 Mac,Windows 上......我鼓励你浏览 SO,有可靠的答案。在您的机器上设置 pg 是一项重要任务,您可能还需要调整更多配置。
      • 好的,我使用您所关注的链接更改了 postgresql 密码,现在我又回到了第一阶段,遇到了推送到 heroku 的麻烦(说已删除的迁移不存在),这比在我什至无法进行生产之前。我会继续工作。谢谢!
      猜你喜欢
      • 2015-04-04
      • 1970-01-01
      • 2012-11-11
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 2017-08-03
      相关资源
      最近更新 更多