Навигация
Управление миграциями
миграций этот вопрос представляется далеко не в самом выгодном свете. 1 временем определения вашей схемы данных будут разбросаны по отдельным дюнным файлам, многие из которых потенциально способны воздейство-. на определения каждой таблицы в вашей схеме. После этого понять, что кон-до содержится в каждой таблице, становится довольно трудно. Облегчить ение этой задачи помогут следующие советы.
Одним из решений может стать просмотр файла db/schema.rb. После запус-s миграции в этом файле будет содержаться полное определение базы данных ► формате Ruby. Некоторые команды разработчиков предпочитают не пользо-ся отдельными миграциями для фиксации всех версий схемы данных. Вме-Еоо этого они заводят по одному файлу миграции для каждой таблицы и файлы 1 mi рации для загрузки разработочных данных в эти таблицы. Когда понадобится мести в схему изменения (скажем, добавить к таблице столбец), они редактиру существующий миграционный файл, предназначенный для этой таблицы. За-они удаляют и заново создают базу данных, применяя к ней все миграции. [Следуя такому подходу, они всегда могут увидеть полное определение каждой «блицы, заглянув в ее миграционный файл. Чтобы все это заработало на практи-. каждый представитель команды должен отслеживать файлы, подвергающиеся вменениям, а затем обновлять свой локальный исходный код в общем хранили¬ще проекта. Изменение миграционных файлов является сигналом для создания сей схемы данных заново.
Хотя может показаться, что подобная схема противоречит духу миграций, на практике она работает весьма неплохо.
Другим подходом может стать уже рассмотренный в этой главе способ нения миграций: создание новой миграции для каждого изменения схемы, отслеживания всего процесса развития схемы можно воспользоваться вне модулем annotate_models. После запуска этот модуль отслеживает тек. схему и добавляет описание каждой таблицы в верхнюю часть файла той м которая имеет к ним отношение.
Установите внешний модуль annotatejnodels, воспользовавшись следу командой (она разбита на две строки, чтобы поместиться на странице).
depot> ruby script/plugin install \
http://svn.pragprog.com/Public/plugins/annotate_models
После установки вы можете запустить этот модуль в любое время, испо: команду:
depot> rake annotate_models
После ее выполнения каждый файл исходной модели получит закомм рованный блок, в котором будет находиться документация по столбцам со: ствующей таблицы базы данных. Например, в нашем приложении Depot lin.e_item.rb будет начинаться со следующего блока:
# Schema as of June 12, 2006 15:45 (schema version 7) #
# Table name: line_iterns #
# id :integer(ll) not null, primary key
# product_id :integer(ll) default(O), not null
# order_id :integer(ll) default(S), not null
# quantity :integer(ll) default(O), not null
# total_price :integer(ll) default(0), not null #
class Lineltem < ActiveRecord::Base
# . . .
Если вы будете последовательно вносить изменения в схему, то нужно перезапускать задачу Rake, тогда информация в закомментированном блоке новится и будет отражать текущее состояние базы данных.