已删除的Rails迁移导致Heroku“发布失败”错误

时间:2018-08-03 16:34:08

标签: ruby-on-rails heroku

我们使用Heroku评论应用对Github上的PR进行质量检查。几个月前的某个时候,我们做了一些内务处理,并删除了许多旧的迁移文件,我认为这导致了Heroku上的部署问题。

这是我的app.json文件-

{
  "name": "myapp",
  "scripts": {
    "postdeploy": "rake db:migrate db:seed db:fixtures:repopulate"
  },
  "env": {
    "WEB_CONCURRENCY": "1",
    "HEROKU_APP_NAME": {
      "required": true
    }
  },
  "formation": {
  },
  "addons": [
    "heroku-redis",
    {
      "plan": "heroku-postgresql",
      "options": {
        "version": "9.6"
      }
    }
  ],
  "buildpacks": [

  ]
}

这是运行heroku releases:output-

的结果
Migrating to PopulateOldPasswordTable (20180305160642)
   (1.3ms)  BEGIN
== 20180305160642 PopulateOldPasswordTable: migrating =========================
  User Load (2.5ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1  [["LIMIT", 1000]]
   (1.2ms)  ROLLBACK
   (1.4ms)  SELECT pg_advisory_unlock(5078732648953702200)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::UndefinedTable: ERROR:  relation "users" does not exist
LINE 1: SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIM...
                               ^
: SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `async_exec'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `block in exec_no_cache'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/abstract_adapter.rb:589:in `block in log'
/app/vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.2/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/abstract_adapter.rb:583:in `log'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `exec_no_cache'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:587:in `execute_and_clear'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:103:in `exec_query'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:373:in `select'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:41:in `select_all'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:95:in `select_all'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/querying.rb:39:in `find_by_sql'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/relation.rb:702:in `exec_queries'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/relation.rb:583:in `load'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/relation.rb:260:in `records'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/relation/batches.rb:200:in `block in in_batches'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/relation/batches.rb:198:in `loop'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/relation/batches.rb:198:in `in_batches'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/relation/batches.rb:120:in `find_in_batches'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/relation/batches.rb:58:in `find_each'
/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.2/lib/active_record/querying.rb:9:in `find_each'
/app/db/migrate/20180305160642_populate_old_password_table.rb:3:in `change'

1 个答案:

答案 0 :(得分:0)

听起来像您删除了不是在所有环境中都运行过的迁移。您真的不想这样做。

如果数据库不包含任何有价值的东西,最简单的恢复方法是销毁它并从头开始重新创建它-将使用您的MouseMove文件,该文件最好与您的其他文件匹配工作环境。

如果这不是一个选择,请考虑[通过您的git历史记录]恢复旧的迁移,至少直到在所有地方完成运行为止。