Rails миграции по существующей базе данных - PullRequest
5 голосов
/ 24 июля 2011

Я создаю новое приложение Rails 3.1. Я хотел бы, чтобы это новое приложение повторно использовало существующую базу данных (которая была создана предыдущим приложением rails 2).

Я создал новое приложение, определяющее модели, которые повторно используют некоторые из существующих данных в базе данных.

На этапе разработки и тестирования все работает нормально, поскольку он работает на чистой базе данных, но при попытке развертывания в производство я получаю сообщения, такие как:

PGError: ERROR:  column "email" of relation "users" already exists
*** [err :: localhost] : ALTER TABLE "users" ADD COLUMN "email" character varying(255) DEFAULT '' NOT NULL

как бы то ни было в моей миграции думает как

class DeviseCreateUsers < ActiveRecord::Migration
  def change
    change_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable
      t.timestamps
    end
end

Как я могу заставить db: migrate игнорировать то, что уже существует, и изменять только новые вещи и / или новые типы?

Я видел похожие вопросы по stackoverflow, но никто не отвечал на этот вопрос. Спасибо за ваши ответы.

Ответы [ 2 ]

10 голосов
/ 25 июля 2011

Если вы используете существующую базу данных, вам не следует пытаться переопределить ее с помощью миграций, вы должны скопировать существующую базу данных в schema.rb, а затем выполнить миграцию вперед оттуда, только добавляя измененные поля.

1 голос
/ 22 января 2013

Один из подходов, которые я выбрал, - это создание новой модели (при условии, что у вас еще нет миграций - осторожно удалите их, если у вас есть), скажем, «rails генерирует пользователя модели». Помимо всего прочего, генератор создает миграцию БД для этой модели. Когда вы запускаете db migrate rails, rails создает таблицу пользователей и создает schema.rb на основе текущего состояния существующей базы данных. С этого момента последующие миграции будут основываться на schema.rb и любых новых изменениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...