Как работает управление версиями в миграторе ActiveRecord? - PullRequest
1 голос
/ 02 апреля 2009

Я пытаюсь изучить Rails, работая с различными пакетами (ActiveRecord, ActiveSupport) без гема rails.

Хотя я не могу понять, как создать базу данных с тремя классами. Вот мой грабли:

require 'rubygems'
require 'activerecord'   
require 'yaml'   

task :default => :migrate   

desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x"   
task :migrate => :environment do   
  ActiveRecord::Migrator.migrate('db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil )   
end   

task :environment do   
  ActiveRecord::Base.establish_connection(YAML::load(File.open('database.yml')))   
  ActiveRecord::Base.logger = Logger.new(File.open('database.log', 'a'))   
end   

И у меня есть три файла:

001_create_appearances.rb 001_create_movies.rb 001_create_actors.rb

Все, что я успешно выполнил в прошлом, каждый просто наследует от ActiveRecord :: Migration и выполняет self.up / self.down.

У меня, однако, проблема в том, что когда я запускаю rake, он возвращает «Несколько миграций имеют номер версии 1». Должен ли я упаковать все миграции в один файл, например, 001_create_database.rb?

Есть ли где-нибудь руководство, описывающее, как работают эти версии?

Я попытался прочитать источник migrator.rb, но не смог найти, где находятся up_without_benchmarks / down_without_benchmarks.

1 Ответ

3 голосов
/ 02 апреля 2009

правый. Миграции должны начинаться с уникальных номеров, чтобы вы хотели, чтобы они выполнялись. По умолчанию в rails 2.x это число будет отображать текущую дату и время.

Причина этого в том, чтобы позволить разработчикам легко запускать и отменять миграции. Временные метки используются вместо последовательных целых чисел в случае, если два разработчика одновременно создают новую миграцию (что приведет к тому, что они получат одинаковое число, когда их отправят в систему контроля версий).

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