2013-06-11 2 views
1

Нам пришлось переключиться с schema.rb на struct.sql, так как нам понадобилось поле VARBINARY в MySQL с индексом указанной длины на нем, который schema.rb не обрабатывает, но struct.sql делает.Rails structure.sql недействителен (таблицы ссылок внешних ключей еще не созданы)

К сожалению, сейчас мы столкнулись с более серьезной проблемой. Файл structure.sql содержит операторы CREATE TABLE в алфавитном порядке. У наших таблиц есть внешние ограничения для них. Файл structure.sql включает эти ограничения ключей, но ссылается на таблицы, которые не создаются до тех пор, пока файл не будет удален.

например.

CREATE TABLE attachments (
    id INT NOT NULL auto_increment PRIMARY KEY, 
    user_id INT, 
    /* ... snip ... */ 
    CONSTRAINT attachments_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE 
) ENGINE=InnoDB CHARSET=utf8; 

/* ... snip ... */ 

CREATE TABLE users (
    id INT NOT NULL auto_increment PRIMARY KEY, 
    /* ... snip ... */ 
) ENGINE=InnoDB CHARSET=utf8; 

Есть ли обходной путь для этого? Похоже, это принципиально нарушено для такого общего принципа схемы схемы БД, я даже не могу поверить, что это что-то. Мы находимся на Rails 3.2.12.

ответ

0

Лучшее, что я знаю, нет необходимости переписывать ваш файл SQL для сортировки операторов таблицы создания в правильном порядке или создания ограничений внешнего ключа в самом конце.

Рассмотрите возможность изменения любого инструмента, используемого для создания файла дампа. Дамп-файлы должны быть в состоянии работать, и это, очевидно, не ...

+0

Это именно то, что Rails вырывает при использовании 'rake db: migrate'. Когда вы затем попытаетесь запустить модульные тесты, он будет использовать этот файл для создания схемы тестирования ... которая взрывается. Изменение инструмента - это в основном то, о чем я прошу, так как мы (очевидно) должны иметь возможность запускать «rake db: migrate», но это делает не то. Мне кто-то сообщил, что это исправлено в Rails 4.0, поэтому мы можем обновить и просто переместиться;) – d11wtq

+0

Я бы предложил подать ошибку в Rails, если она все еще встречается в последней версии. : | –

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