あるデータベースから他のデータベースにデータを転送する

Ruby On Rails 3アプリケーションでは、SqliteからMySQLに切り替える必要がありました。 必要だったのは、特にインターネットとStackOverflowでいっぱいだった面倒なPerlスクリプトと有料のユーティリティなしで、シンプルで効果的な方法でした。

説明


最適なオプションはgem yaml_dbで、 Heroku開発チームの腸内に登場しました。

gemの本質は、YAMLファイル内の1つのデータベースからのデータのダンプをディスクに保存し、それを別のデータベースにロードすることです(もちろん、このアプローチはバックアップにも使用できます)。

このアプローチの利点は、どのベースで作業するかが問題にならないことです。 理論的には、ActiveRecordアダプターが存在するすべてのデータベースがサポートされています。

最も単純なユースケース


Gemfileにyaml_dbを追加します。
gem 'yaml_db', :git => 'git://github.com/ludicast/yaml_db.git'

Bundlerを起動します。
bundle install

初期データベース構成:
config / database.yml
 production: adapter: sqlite3 database: db/production.sqlite3 pool: 5 timeout: 5000 

実際、ダンプ自体を実行します。
export RAILS_ENV=production
rake db:data:dump


その後、データベースはdb / data.ymlにあるはずです。

すべて順調であれば、データベース構成を目的の構成に変更します。
config / database.yml
 production: adapter: mysql2 database: app_production username: root password: root host: localhost pool: 5 timeout: 5000 

必要なgemをgemfileに追加することを忘れないでください。

データベースを作成し、移行を実行します。
rake db:create
rake db:migrate


最後に、ダンプを新しいデータベースにロードします。
rake db:data:load

これでサーバーを起動し、すべてが機能していることを確認できます。

備考


Ruby 1.9ブランチを使用する場合、Bundlerバージョン1.0.10はデフォルトのYAMLエンジンとしてPsychをロードしますが、これはRailsの一部のバージョンでは正しく動作しないため、ダンプの挿入時に問題が発生した場合は、解決策の1つPsychをSyckに置き換える可能性があります。
config / application.rbの次の行
Bundler.require(:default, Rails.env) if defined?(Bundler)
挿入する
YAML::ENGINE.yamler = 'syck'

yaml_dbはデータをダンプできるだけでなく、データベース構造もダンプできます。
rake db:dump
rake db:load

最初のタスクはデータと構造をダンプし、2番目のタスクはテーブルを作成してデータをロードします。

参照資料


yaml_dbの Herokuブログ投稿
Rails 2.x のyaml_dbブランチ

Source: https://habr.com/ru/post/J117797/


All Articles