2014-03-13 4 views
0

У меня есть новое приложение для рельсов, которое потребляет из существующей БД (созданной другим рубиновым приложением). Для этого я создал модель для уже существующей таблицы базы данных, но теперь рельсы дает мне сообщение об ошибке, что я должен запуститьRake db: переход на существующую базу данных

rake db:migration 

Но если я пытаюсь сделать так, я получаю ошибку, потому что таблица уже существует.

Есть ли способ выполнить миграцию и игнорировать существующие таблицы? Таблица правильная, должна быть там и заполнена данными, поступающими для другого приложения. Я хотел бы, чтобы это приложение использовало информацию.

Благодаря

Edit: Настройки БД отлично, потому что я был в состоянии выполнять ДБ: миграции прежде. Я создал модель, используя

rails g model fundo 

(Fundo этого названия модели и Fundos этого имя таблицы) модели не имеет свойства еще, но таблица имеет столбцы

Edit 2: Это выход, если я запускаю с --trace

$ rake db:schema:dump --trace

** Invoke db:schema:dump (first_time)

** Invoke environment (first_time)

** Execute environment

** Invoke db:load_config (first_time)

** Execute db:load_config ** Execute db:schema:dump

$ rake db:migrate --trace

** Invoke db:migrate (first_time)

** Invoke environment (first_time)

** Execute environment

** Invoke db:load_config (first_time)

** Execute db:load_config

** Execute db:migrate == CreateFundos: migrating ===================================================

-- create_table(:fundos) rake aborted! An error has occurred, this and all later migrations canceled: PG::DuplicateTable: ERROR: relation "fundos" already exists CREATE TABLE "fundos" ("id" serial primary key, "created_at" timestamp, "updated_at" timestamp)

Кажется, что рельсы пытаются воссоздать таблицы. Но я просто хочу, чтобы они синхронизировались, потому что таблица уже есть!

+0

Можете ли вы подтвердить правильность конфигурации базы данных и что существующее имя таблицы соответствует стандарту Rails для вновь созданной модели? – vee

+0

@vee обновил вопрос;) – JSBach

ответ

1

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

Схема таблицы будет правильно сбрасываться в schema.rb, поэтому ее можно всегда создавать с нуля на других машинах с rake db:setup, даже без файла миграции.

Вы можете использовать rake db:schema:dump для обновления schema.rb вручную.

1

Есть много файлов переноса, которые вы хотите выполнить? Если не слишком много, вы можете выполнить конкретную версию мигрировать

rake db:migrate:redo VERSION=version 

Если перенос файлов для создания таблицы не слишком много, может быть, вы можете отредактировать файл перенастройки, добавив:

if ActiveRecord::Base.connection.table_exists?(table_name) 

, прежде чем создавать стол.

В вашей локальной среде, возможно, вы можете просто удалить ненужные файлы.

1

кд дб/мигрировать/

Ls | cut -d '_' f1 | при чтении строки; do bundle exec rake db: migrate: up VERSION = $ line; сделано

запускает все миграции в файле

0

-- create_table(:fundos) rake aborted! An error has occurred, this and all later >migrations canceled: PG::DuplicateTable: ERROR: relation "fundos" already exists >CREATE TABLE "fundos" ("id" serial primary key, "created_at" timestamp, >"updated_at" timestamp)

Что я хотел бы сделать, это пойти в дБ/мигрировать и перейти к этой миграции файл где create_table (: Fundos) происходит. Прокомментируйте это. Повторите попытку, если он снова выдаст ошибку, проверьте ошибку и найдите код нарушения.Затем прокомментируйте это и продолжайте делать это, пока это не пройдет. Как только это пройдет, прокомментируйте все.

Смежные вопросы