PG::UndefinedTable: ОШИБКА: таблица с именем таблицы не существует

Я возился со своей базой данных, создавая и удаляя таблицы. Я удалил несколько файлов миграции после того, как отправил их на героку. Ранее я создал таблицу «мамы». Позже я захотел переименовать его, поэтому удалил «мамы» и создал новую таблицу «минуты_совещаний». Я сделал $rake db:migrate, и все было сделано успешно, и мое приложение отлично работает на локальном хосте.

После того, как я отправил его на героку, когда я запустил $heroku rake db:migrate, он сгенерировал следующий журнал:

  ActiveRecord::SchemaMigration Load (0.7ms)  SELECT "schema_migrations".* FROM "schema_migrations"
  Migrating to DropMoms (20150823142852)
  (0.6ms)  BEGIN
             == 20150823142852 DropMoms: migrating =========================================
                 -- drop_table(:moms)
             (0.9ms)  DROP TABLE "moms"
             PG::UndefinedTable: ERROR:  table "moms" does not exist
             : DROP TABLE "moms"
             (0.5ms)  ROLLBACK
             rake aborted!
             StandardError: An error has occurred, this and all later migrations canceled:

                                                                                     PG::UndefinedTable: ERROR:  table "moms" does not exist
             : DROP TABLE "moms"/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `async_exec'
      /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `block in execute'

Я создал новую таблицу «мамы» в героку, чтобы ее можно было удалить при выполнении миграции. Я сделал это:

$ heroku run Ruby console for rails-app-name >> ActiveRecord::Migration.create_table :moms 

Я также создал миграцию для создания таблицы «мамы». Но все равно ошибка сохраняется.

РЕДАКТИРОВАТЬ:

Это мой файл миграции CreateMoms:

class CreateMoms < ActiveRecord::Migration
  def change
    create_table :moms do |t|
      t.string :name
      t.timestamp null: false
    end
  end
end

Когда я запускаю heroku, запускаю rake db:migrate:up

Running `rake db:migrate:up` attached to terminal... up, run.1729
rake aborted!
VERSION is required
/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:78:in `block (3 levels) in <top (required)>'
Tasks: TOP => db:migrate:up
(See full trace by running task with --trace)
WARNING: Toolbelt v3.41.3 update available.

На героку запустите rake db:migrate:down

Running `rake db:migrate:down` attached to terminal... up, run.6389
rake aborted!
VERSION is required - To go down one migration, run db:rollback
/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:86:in `block (3 levels) in <top (required)>'
Tasks: TOP => db:migrate:down
(See full trace by running task with --trace)
WARNING: Toolbelt v3.41.3 update available.

person fhaider    schedule 23.08.2015    source источник
comment
Можете ли вы показать файл миграции? Миграция всегда должна быть написана таким образом, чтобы работала и обратная миграция.   -  person K M Rakibul Islam    schedule 23.08.2015
comment
что произойдет, если вы попробуете: heroku run rake db:migrate:up и heroku run rake db:migrate:down?   -  person K M Rakibul Islam    schedule 23.08.2015
comment
у вас все еще есть таблица moms в вашей схеме на героку?   -  person K M Rakibul Islam    schedule 23.08.2015
comment
Я обновил файл журнала, созданный с помощью heroku run rake db:migrate:up and down. И да, у меня есть мамы за столом   -  person fhaider    schedule 23.08.2015
comment
Попробуйте: heroku run rake db:schema:load, а затем повторите попытку переноса: heroku run rake db:migrate   -  person K M Rakibul Islam    schedule 23.08.2015
comment
Вы только что спасли мой день! Спасибо. Пожалуйста, опубликуйте это как ответ. Кстати, в чем была ошибка и что сделал db:schema:load?   -  person fhaider    schedule 23.08.2015
comment
Пожалуйста :) rake db:schema:load просто загружает файл schema.rb в базу данных   -  person K M Rakibul Islam    schedule 23.08.2015


Ответы (1)


Осторожность

rake db:schema:load удалит все ваши данные из базы данных heroku. Пожалуйста, убедитесь, что у вас есть резервная копия данных на героку. Если у вас еще нет резервной копии базы данных heroku, вы можете легко сделать это с помощью Резервные копии Heroku PGB

Похоже, ваш schema запутался. Просто загрузите схему в базу данных с помощью rake db:schema:load, а затем снова запустите миграцию:

heroku run rake db:schema:load
heroku run rake db:migrate
person K M Rakibul Islam    schedule 23.08.2015
comment
Данные в моем приложении были удалены. Как я могу вернуть его? - person fhaider; 23.08.2015
comment
Вы можете экспортировать/импортировать данные с помощью резервных копий heroku PG. Инструкции находятся здесь: devcenter.heroku.com/articles/heroku-postgres-import- экспорт - person K M Rakibul Islam; 23.08.2015
comment
У меня было огромное количество данных, и я не помню, чтобы я когда-либо создавал резервную копию. Есть ли способ отменить db:schema:load? :( - person fhaider; 23.08.2015
comment
Или вы можете загрузить исходные данные, используя: heroku run rake db:seed - person K M Rakibul Islam; 23.08.2015
comment
ой, у тебя не было бекапа? :( - person K M Rakibul Islam; 23.08.2015
comment
Что мне теперь делать? :( - person fhaider; 23.08.2015
comment
Боюсь, мы не можем отменить db:schema:load . Моя ошибка, я должен был спросить раньше, есть ли у вас резервная копия данных. Насколько я понимаю, ваше приложение находится на героку, у вас должна быть резервная копия tdata с резервными копиями PG. - person K M Rakibul Islam; 23.08.2015
comment
Давайте продолжим обсуждение в чате. - person K M Rakibul Islam; 23.08.2015