类似Rails的数据库迁移?

时间:2020-03-06 14:25:57  来源:igfitidea点击:

是否有任何易于安装/使用(在UNIX上)的数据库迁移工具(如Rails迁移)?我真的很喜欢这个主意,但是单纯地安装ruby / rails来管理数据库迁移似乎过分了。

解决方案

我还没有亲自做过,但是应该可以使用ActiveRecord :: Migration而无需其他Rails东西。正确设置加载路径将是困难的部分,但实际上,我们所需要做的只是rake任务和db / migrate目录以及它们所依赖的任何Rails gem,可能是activerecordactviesupport以及与其他人一样,例如" railies"。我会尝试一下,然后看看缺少哪些类,然后将其添加进去。

在以前的公司中,我们构建了一个工具,该工具实际上完成了ActiveRecord :: Migration的工作,只是它是用Java作为Maven插件编写的。它所做的只是组装SQL脚本的文本Blob。它只需要对文件名进行排序有一定的了解,并知道如何更新版本表。

只需使用ActiveRecord和一个简单的Rakefile。例如,如果将迁移文件放在db / migrate目录中,并具有一个具有db配置的database.yml文件,则此简单的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 migration,并在没有周围Rails应用程序的情况下拥有所有的迁移优势。

另外,我有一组bash脚本,它们执行的功能与ActiveRecord迁移非常相似,但它们仅适用于Oracle。在切换到Ruby和Rails之前,我曾经使用过它们。它们有些复杂,因此我不提供任何支持,但是如果我们有兴趣,请随时与我联系。

还有一个名为Java Database Migrations的项目。要获取代码,请查看该项目的Google代码页面。

我看到这个主题确实很老,但我会为将来的Google员工提供帮助。

如果我们不想走ActiveRecord :: Migrate路线,我真的很喜欢使用Python的SQLAlchemy和SQLAlchemy-Migrate来管理需要版本控制的数据库。