2012-08-09 11 views

答えて

3

Rails以外のプロジェクトでRailsデータベース移行を使用するという宝石があります。その名前はここで

あなたは熊手を使用したいが、それでものシステムの一部を取得しない場合は

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

+3

このリンク質問に答えるかもしれないが、答えの本質的な部分をここに含めて、参考のためのリンクを提供する方がよい。リンクされたページが変更された場合、リンクのみの回答は無効になります。 –

1

新を見ている「standalone_migrations」でありますActiveRecord :: Migrationを使用すると、以下を使用して普通のルビーの浮き沈みを(レールなしで)処理できます:

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 
関連する問題