私はRails外でActiveRecordを使用しています。私は、マイグレーションのスケルトンを生成するプログラム(そしてそれらを収集して維持するシステム)を望みます。Rails外へのマイグレーションの生成
誰でも提案できますか?
私はRails外でActiveRecordを使用しています。私は、マイグレーションのスケルトンを生成するプログラム(そしてそれらを収集して維持するシステム)を望みます。Rails外へのマイグレーションの生成
誰でも提案できますか?
Rails以外のプロジェクトでRailsデータベース移行を使用するという宝石があります。その名前はここで
あなたは熊手を使用したいが、それでものシステムの一部を取得しない場合は
リンクはまたactive_record_migrations
新を見ている「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
このリンク質問に答えるかもしれないが、答えの本質的な部分をここに含めて、参考のためのリンクを提供する方がよい。リンクされたページが変更された場合、リンクのみの回答は無効になります。 –