У меня есть две машины... машина для разработки и машина для производства. Когда я впервые перенес свое приложение 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.