Ruby on Rails 3.0で本番環境はPostgreSQL、開発環境はSQLite3を使うときのように本番環境はPostgreSQL、開発環境はSQLite3を使っている。デバッグなどのために本番環境のデータを開発環境に持ってきたいときがある。そこで、yaml_dbを用いてデータを移行する。
本番環境での作業
まず、yaml_dbをインストールする。Gemfileに以下を追記する。
gem 'yaml_db'
その後、bundleでインストール。
% bundle install --without development
本番環境のデータを吐き出す。吐き出されたデータは db/data.yml に格納される(日本語文字列はバイナリーで扱われるみたい)
% rake db:data:dump
開発環境での作業
まず、yaml_dbをインストールする。Gemfileに以下を追記する。
gem 'yaml_db'
その後、bundleでインストール。
% bundle install --without production
本番環境からdata.ymlを持ってくる。それをdb/data.ymlとして保存し、以下のコマンドで読み込む。
% rake db:data:load
追記
PostgreSQLの方で生成したdata.ymlをSQLite3で読み込む。そして、そのSQLite3でdata.ymlを生成し、PostgreSQLに読み込ませる。すると、一部のデータが文字化けする。原因は、yaml_dbでは日本語文字列はバイナリデータとして扱われるのだが、文字列の先頭がascii文字だと英文と判断されて、binaryデータでは保存されないみたい。この部分で文字化けが起こっている。