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

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ブランチ



All Articles