代码之家  ›  专栏  ›  技术社区  ›  mannicken

ActiveRecord的migrator中的版本控制是如何工作的?

  •  1
  • mannicken  · 技术社区  · 17 年前

    我试图通过使用不同的包(ActiveRecord、ActiveSupport)而不使用Rails gem来学习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\u/没有基准测试的down\u的位置。

    1 回复  |  直到 17 年前
        1
  •  3
  •   Gdeglin    17 年前

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

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