Т.Л., ЛУ вы ничего не испортите на самом деле, но не делают этого TRUNCATE в любом случае. Сделайте db:reset
Что происходит, когда вы пишете миграции является то, что файл db/schema.rb
получает изменен и его версия устанавливается на отметку времени на последней миграции, которая была запущена. Файлы миграции существуют так, что:
- У вас могут быть конкретные файлы, которые демонстрируют изменения в базе данных с течением времени, используя DSL, что имеет смысл.
- Вы можете откатить изменения, внесенные в базу данных пола произвольно, если вы обнаружите что-то не так в процессе разработки (не откатить вашу продукцию DB, просто написать новую миграцию)
Это означает, что миграционные файлы должны показать, что вы делаете с базой данных, и что TRUNCATE на самом деле не то, что вы делаете с БД, это то, что вы делаете с данными . Он ничего не сломает и что фрагмент SQL не будет запущен, если вы развернете новую среду с помощью схемы, которая уже перенесена, но для любой среды, которая уже завершена, это произойдет. Это просто странно и определенно не нужно.
ПОДРОБНО.Подробнее
Что происходит при развертывании приложения в первый раз в среде есть вы (должны) запускать rake db:create db:schema:load db:seed
или rake db:setup
(который только хутора к другим командам). db:schema:load
просто преобразует ваш файл schema.rb
в фактическую схему базы данных, с таблицами и индексами и всем этим интересным материалом. После запуска миграции ваш файл схемы будет иметь нужный вам индекс. Затем, всякий раз, когда вы развертываете производство, ваша база данных будет выглядеть так, как будто вы хотите, чтобы она была вне коробки, прежде чем какие-либо данные будут добавлены.
В разработке вы не должны прикрепляться к каким-либо данным, находящимся в вашей базе данных, - это тестовые данные, несущественные и эфемерные. Вы не должны чувствовать себя плохо, вытирая все это, особенно если вы усекаетесь, потому что существующие данные могут быть недействительными/дублируемыми.
Моя цель в усечении состояла в том, чтобы не перезагружать весь db, чтобы минимизировать влияние этой миграции для других разработчиков моей команды. Так что просто вытирание этой таблицы было правильным, чтобы миграция стала проще всего проходить. Не могли бы вы согласиться с тем, что усечение будет соответствовать этому случаю? Или у вас есть более «хирургическая» альтернатива db: reset, которая не является усечением? –
Что вы делаете, это не прикладная логика, она работает. Поэтому он не должен сохраняться в вашем приложении (т. Е. Записываться в перенос). Просто перейдите в консоль SQL или rails ('Model.destroy_all'), чтобы сделать это. – ABMagil
Возможно, но существует более чем несколько примеров людей (Google для миграции данных с помощью рельсов) с использованием миграции Rails для более чем простого изменения структуры БД, то есть миграции/изменения данных, либо до/после изменения структуры БД. –