【问题标题】:How does versioning in ActiveRecord's migrator work?ActiveRecord 的迁移器中的版本控制如何工作?
【发布时间】:2010-10-17 00:22:12
【问题描述】:

我正在尝试通过在没有 rails gem 的情况下使用不同的包(ActiveRecord、ActiveSupport)来学习 Rails。

不过,我不知道如何创建一个包含三个类的数据库。 这是我的 rakefile:

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 的位置。

【问题讨论】:

    标签: ruby activerecord migration


    【解决方案1】:

    没错。迁移必须以唯一编号开始,以便您希望它们被执行。默认情况下,在 rails 2.x 中,此数字将表示当前日期和时间。

    这样做的原因是允许开发人员轻松运行和撤消迁移。如果两个开发人员同时创建新的迁移,则使用时间戳而不是连续整数(这会导致他们在被推送到版本控制系统时具有相同的编号)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 2020-08-24
      • 2022-09-24
      • 2016-12-13
      • 2018-04-06
      • 2015-06-07
      • 1970-01-01
      相关资源
      最近更新 更多