Rubyスクリプトを使用してLOAD DATA LOCAL INFILE
MYSQLからCSVファイルをインポートして構築された一連のテーブルからデータを提供する実動Railsアプリケーションがあります。テーブルには一貫して名前が付けられ、スキーマは変更されません。スクリプトはテーブルとスキーマを削除/作成し、データをロードします。定期的に再作成される実稼働中のRailsアプリケーションで、一連のmysqlテーブルを管理するにはどうすればよいですか?
しかし、私はデータの変更をどのように管理するかを再確認したい。 (1)ユーザーの要求に対応するアプリケーションを中断することなくデータ更新を頻繁にプッシュし、(2)新しいデータセットを「テスト可能」にすることができます。 (何かが間違っていた場合、前のテーブル/データにロールバックする機能を備えています)。
私が考えているのは、「バージョン」のテーブルを保持し、新しい再構築が行われるたびにレコードを作成することです。最新のバージョンIDはdatabase.yml
に詰め込まれ、各モデルはdatabase.yml
からテーブル名を指定できます。スクリプトは、古いバージョンを破棄することなく、新しいインポートですべてが正常であることを確認するために、バージョンを前進または後退させることができます。
これは良いアプローチですか?このようなパターンは既にありますか?それはRailsの移行にいくぶん類似しているようです。この種のデータ管理に役立つプラグインや宝石はありますか?
UPDATE /現在の解決策:database.yml
の設定を作成してインポート時にテーブルを作成しました。データは環境に基づいて変更されないため、環境固有の設定の「ピア」です。更新する唯一の4つのモデルがあるので、私は明示的にデータベース接続を追加しました:
establish_connection Rails.configuration.database_configuration["other_db"]
移行とクエリがレールと、通常のように動作し、この道を。インポートを実行し続けるには、インポートごとに個別の設定でデータベース名を更新します。この方法で以前のデータベースバージョンを手動で指定し、問題が発生した場合はアプリケーションを再起動することができました。
config = YAML.load_file(File.join("config/database.yml"))
config["other_db"]["database"] = OTHER_DB_NAME
File.open(path, 'w'){|f| f.write(config.to_yaml)}