Подтвердить что ты не робот

Heroku запустить rake db: перенести результаты без изменений в базе данных, приложение перезапустилось несколько раз

У меня возникла проблема с переносом моих миграций в производственную базу данных.

Проблема:

  • Я изменил схему базы данных, добавив 1 столбец.
  • Я перенес его в производственную базу данных:

    MacBook-Air-Mac: приложение msc $rake db: migrate RAILS_ENV = "production" [RailsAdmin] Инициализация RailsAdmin отключена по умолчанию. Пропустите SKIP_RAILS_ADMIN_INITIALIZER = false, если вам это нужно. == AddLengthColumnToBooks: миграция ========================================================================================== - add_column (: books,: length,: integer)  - > 0,0017s == AddLengthColumnToBooks: migrated (0.0019s) ========================================

  • Подумав о том, что новая схема БД теперь находится в производстве, я развернул код, который выполняет некоторые действия с :length.

  • В процессе производства я получил следующую ошибку:

    undefined метод `length = 'для #

  • Я сделал heroku rollback и понизил приложение до последней надежной версии.

  • THEN (возможно, слишком поздно) Я узнал, что мне нужно heroku restart приложение загрузить новые индексы. Я делал это несколько раз.

  • Затем я открыл консоль и проверил Book.column_names, но не было length

  • Я сделал heroku run rake db:migrate, а затем heroku restart еще раз, никаких изменений.

  • Я пробовал переносить другой столбец на производственный db, но не получил никакого сообщения вообще, даже не из p.2.

Что я здесь делаю неправильно?

Обновление

Основываясь на ответах Philipe, я сделал несколько дополнительных шагов:

  • git add db/schema.rb, git add db/migrate/20130325103953_add_length_column_to_books.rb и 'git добавить db/migrate/20130401041910_add_duration_column_to_books.rb'. Git ответ был:
  • Изменения, которые необходимо совершить:  (используйте "git reset HEAD..." для нестабильности)

    новый файл: db/migrate/20130325103953_add_length_column_to_books.rb новый файл: db/migrate/20130401041910_add_duration_column_to_books.rb изменено: db/schema.rb

  • Тогда я сделал git commit -m "Updating the schema".

  • Снова выход:

     3 files changed, 168 insertions(+), 156 deletions(-)
    

    создать режим 100644 db/migrate/20130325103953_add_length_column_to_books.rb  создать режим 100644 db/migrate/20130401041910_add_duration_column_to_books.rb

  • Затем я запустил heroku run rake db:migrate. К сожалению, никаких признаков миграции не было, просто получил:

    Запуск rake db:migrate, подключенный к терминалу... вверх, run.5428 и что он.

  • В рабочей консоли Rails консоль Book.column_names все еще не имеет длины и продолжительности.

Теперь у меня еще больше идей. `

4b9b3361

Ответ 1

Не похоже, что вы делаете изменения в Heroku. Шаги должны быть следующими:

  • Внести изменения в локальный код
  • Выполнять любые миграции LOCALLY
  • Добавить все измененные файлы в Git git add .
  • Зафиксировать все добавленные файлы до Git git commit -m "Adding features"
  • Нажмите на изменения в Heroku git push heroku master - если вы используете heroku в качестве своего удаленного имени и работаете в ветке master
  • Если у вас есть миграции, запустите heroku run rake db:migrate, чтобы запустить миграции ON HEROKU
  • После миграции выполните heroku restart

Это должно быть все, что вам нужно, чтобы заставить вас работать.

Ответ 2

У меня была та же проблема; я git добавил миграции, git отбросил их на сервер, закрыл их, и база данных не изменилась. Вход на сервер напрямую, запуск rake db: migrate, и в командной строке, похоже, была выполнена миграция, но ничего не изменилось.

В моем случае, как-то rake db: migrate использовал неправильный RAILS_ENV. Я вошел на сервер и запустил

rake db: migrate RAILS_ENV = production

Это заставило базу данных создавать новые столбцы, а затем весь код, который был отлажен в тестовой базе данных, начал работать на сервере.

Ответ 3

У меня была такая же проблема. После добавления столбца к моей локальной базе данных я сделал heroku run rake db:migrate -app [my app name]. Запустив мой код на производстве, я получил ActiveRecord::UnknownAttributeError (unknown attribute '_____' for [table name].)

Это решило мою проблему:

heroku restart --app [my app name]

Ответ 4

Мои два цента основаны на моем опыте: я думал, что heroku run db:migrate также перенесло содержимое db в производство. Нет! Только структура. Поэтому в моем случае вход в систему не работал на производстве, потому что в нем не было пользователей. Я должен был снова подписать тест пользователя, а затем он сработал. Надеюсь, что это поможет новобранцам, таким как я, там.