У меня есть две машины ... машина для разработки и машина для производства. Когда я впервые перенес свое приложение rails на рабочий сервер, у меня не было проблем. Я просто импортировал schema.rb, запустив rake db: schema: load RAILS_ENV = production. Все было хорошо.
Итак, затем на своей машине для разработки я сделал еще несколько изменений и еще одну миграцию, а затем скопировал новое приложение на рабочую машину. Затем я попытался обновить базу данных, запустив rake db: migrate RAILS_ENV = production. Я получаю следующую ошибку:
«В базе данных уже есть объект с именем schema_migrations.»
Я думаю про себя, ты не шутишь, Рейк ... ты создал это! Я запустил трассировку на рейке, и похоже, что рейк думает, что это первый раз, когда он запускается Однако, проанализировав мою таблицу schema_migrations на моей машине разработки и моей рабочей машине, вы можете увидеть, что существует разница в одной миграции, а именно той, которую я хочу перенести.
Я также пытался явно указать номер версии, но это тоже не работает.
Есть идеи о том, как обновить мой рабочий сервер?
Обновление:
Позвольте мне начать с того, что я не могу просто «отбросить» базу данных. Это рабочий сервер, на котором уже находится более 100 тысяч записей. Что произойдет, если подобная проблема возникнет в будущем? Я должен просто отбрасывать таблицу каждый раз, когда возникает проблема с базой данных? На этот раз это может сработать, но не похоже на практическое долгосрочное решение каждой проблемы с базой данных. Я сомневаюсь, что проблема, с которой я столкнулся сейчас, уникальна для меня.
Звучит так, будто таблица 'schema_info' и таблица 'schema_migrations' совпадают. В моей настройке у меня есть только «schema_migrations». Как указывалось ранее, разница между таблицей schema_migrations на рабочем сервере и компьютере разработчика составляет всего одну запись. То есть запись, содержащая номер версии изменения, которое я хочу перенести.
Из книги, которую я прочитал, «Просто Rails 2», говорится, что при первом переходе на рабочий сервер вместо запуска rake db: migrate нужно просто запустить rake: db: schema: load.
Если это имеет значение, я использую Rails версии 2.1.