2012-08-09 17 views

Respuesta

3

Hay una joya para usar Rails Database Migrations en proyectos non Rails. Su nombre es "standalone_migrations"

Aquí hay un enlace

https://github.com/thuss/standalone-migrations

+3

Mientras este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. –

1

Si no te gusta usar el rastrillo, pero aún así obtener la parte del sistema de ActiveRecord :: Migration, entonces puede usar lo siguiente para manejar los altibajos del ruby ​​simple (sin ningún riel):

require 'active_record' 
require 'benchmark' 

# Migration method, which does not uses files in db/migrate but in-memory migrations 
# Based on ActiveRecord::Migrator::migrate 
def migrate(migrations, target_version = nil) 

    direction = case 
    when target_version.nil?  
     :up 
    when (ActiveRecord::Migrator::current_version == target_version) 
     return # do nothing 
    when ActiveRecord::Migrator::current_version > target_version 
     :down 
    else 
     :up 
    end 

    ActiveRecord::Migrator.new(direction, migrations, target_version).migrate 

    puts "Current version: #{ActiveRecord::Migrator::current_version}" 
end 

# MigrationProxy deals with loading Migrations from files, we reuse it 
# to create instances of the migration classes we provide 
class MigrationClassProxy < ActiveRecord::MigrationProxy 
    def initialize(migrationClass, version) 
    super(migrationClass.name, version, nil, nil) 
    @migrationClass = migrationClass 
    end 

    def mtime 
    0 
    end 

    def load_migration 
    @migrationClass.new(name, version) 
    end  
end 

# Hash of all our migrations 
migrations = { 
    2016_08_09_2013_00 => 
    class CreateSolutionTable < ActiveRecord::Migration[5.0] 
     def change   
     create_table :solution_submissions do |t| 
      t.string :problem_hash, index: true 
      t.string :solution_hash, index: true 
      t.float :resemblance 
      t.timestamps 
     end 
     end 
     self # Necessary to get the class instance into the hash! 
    end, 

    2016_08_09_2014_16 => 
    class CreateProductFields < ActiveRecord::Migration[5.0] 

     # ... 

     self 
    end 
}.map { |key,value| MigrationClassProxy.new(value, key) } 

ActiveRecord::Base.establish_connection(
    :adapter => 'sqlite3', 
    :database => 'XXX.db' 
) 

# Play all migrations (rake db:migrate) 
migrate(migrations, migrations.last.version) 

# ... or undo them (rake db:migrate VERSION=0) 
migrate(migrations, 0) 

class ApplicationRecord < ActiveRecord::Base 
    self.abstract_class = true 
end 

class SolutionSubmission < ApplicationRecord 

end 
Cuestiones relacionadas