Rails-подобные миграции баз данных?

Есть ли какой-либо простой в установке/использовании (в unix) инструмент миграции базы данных, такой как Rails Migrations? Мне очень нравится эта идея, но установка рубинов/рельсов исключительно для управления миграцией базы данных кажется излишней.

Ответ 1

Просто используйте ActiveRecord и простой Rakefile. Например, если вы переносите свои миграции в каталог db/migrate и имеете файл database.yml, у которого есть ваша конфигурация db, этот простой Rakefile должен работать:

Rakefile:

require 'active_record'
require 'yaml'

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(STDOUT)
end

database.yml

adapter: mysql
encoding: utf8
database: test_database
username: root
password:
host: localhost

После этого вы сможете запустить rake migrate и получить все преимущества миграции без приложения окружения.

В качестве альтернативы, у меня есть набор сценариев bash, которые выполняют очень похожую функцию для миграции ActiveRecord, но они работают только с Oracle. Раньше я использовал их, прежде чем переключиться на Ruby и Rails. Они несколько сложны, и я не поддерживаю их, но если вы заинтересованы, не стесняйтесь обращаться ко мне.

Ответ 3

Я вижу, что эта тема действительно старая, но я буду использовать для будущих googlers.

Мне очень нравится использовать Python SQLAlchemy и SQLAlchemy-Migrate для управления базами данных, которые мне нужны для контроля версий, если вы не хотите перейдите по маршруту ActiveRecord:: Migrate.

Ответ 4

Я лично не сделал этого, но должен быть возможно использовать ActiveRecord:: Migration без каких-либо других вещей Rails. Правильная настройка пути загрузки была бы сложной, но на самом деле все, что вам нужно - это задачи rake и каталог db/migrate, а также все, от чего они зависят, от Rails, возможно, activerecord, actviesupport и, возможно, пара других как railties. Я бы попробовал и просто посмотрел, какие классы отсутствуют, и добавьте их.

В предыдущей компании мы построили инструмент, который по сути делал то, что делает ActiveRecord:: Migration, за исключением того, что он был написан на Java как плагин Maven. Все, что было сделано, это собрать текстовые капли SQL-скриптов. Он просто должен быть умным в отношении имен файлов, находящихся в порядке, и знать, как обновлять таблицу версий.

Ответ 5

Этот проект предназначен для запуска активных миграций записей без установки Rails:

https://github.com/bretweinraub/rails-free-DB-Migrate

Установите его (git клонировать его) и используйте его в качестве базы для своего проекта.