2013-06-01 14 views
7

どのようにしてレールsqlite3 dbのデータをファイルに抽出できますか?rails dbをJSONファイルに抽出する

私は私が私のデータベースをリセットする場合ので、私は後でそれを再ロードすることができ、私のデータベース内のすべてのデータを抽出したい、または私はデシベルの異なるタイプに切り替えると、レール4

を使用しています。

+0

なぜ単にdb dumpを取得しないのですか? – kiddorails

+0

どうすればいいですか? – Nayish

+0

答えは – kiddorails

答えて

5

"yaml_db" gemを使用してください。他のデータベースにデータをロードするデータ (データはダンプ後別々のファイルに格納されている) と

rake db:data:load 

をダンプするhttps://github.com/ludicast/yaml_db

rake db:data:dump 

2

データベースのDBダンプファイルを作成し、必要に応じて使用するだけです。

これはストレートSqlite3 Helpからである 、あなたがdb/development.sqlite3のためのデータベースをダンプすると仮定:

単一のASCIIテキストファイルにデータベース の内容全体を変換するために、「.dump」コマンドを使用します。このファイルは、データベースに変換され、sqlite3にパイプすることで戻すことができます。

は、ダンプファイルを作成するには、次の

echo '.dump' | sqlite3 db/development.sqlite3 | gzip -c > dev.dump.gz 

は、ダンプ・ファイルを復元するには:

zcat dev.dump.gz | sqlite3 development.sqlite3 
+0

ダンプで 'sh.exe ':sqlite3:コマンドが見つかりませんでした' – Nayish

+0

リモートマシンを操作していないのですが、 'sqlite3'は現在のRailsプロジェクトディレクトリあなたのプロジェクトでそれを使用している場合 – kiddorails

+0

ローカルマシンを操作すると、sqlite3は私の現在のRailsプロジェクトの宝石です... – Nayish

3

は、私は完全に.dumpの代わりに、JSON形式のダンプを生成するに同意します。好奇心のためだけに、私はすべてのモデルをjsonに変換するスクリプトを書いた。

Rails.application.eager_load! # To load all models app/models/**/*.rb 

all_records = ActiveRecord::Base.descendants.map &:all 

all_records.to_json 

しかし、実際の環境では多くのレコードで実行するには時間がかかるでしょう。 SQLite3のよう

(私はこのような場合のためにお勧めします)もう一つの方法はちょうどdb/development.sqlite3.backupにファイルdb/development.sqlite3をコピーし、ファイルのみです。それを回復するには、cp -f db/development.sqlite3.backup db/development.sqlite3をコピーしてください。 .dumpは、insertsおよびcreatesステートメントでASCIIテキストファイルを生成します。レコードを複製しようとするため、抽出されたデータベースでは回復できません。

+0

これはjavascriptやsqlite3コマンドを使用するよりもはるかに優れています。 – Subhas

0

私はJSONに全てのDBを抽出するために使用ユーザーフレンドリーなphpmyadminエクスポートを使用します。それは簡単にあなたのデータベースのjsonデータをエクスポートを作成します。これがあなたを助けることを望みます。

後藤phpmyadminの

エクスポート/タイプJSON

2

することはでき、簡単な書き込み種子におけるこのライン。RBここPost

File.open("post.json", "w") { |f| f.write Post.all.to_json } 

は、お使いのモデルの名前に置き換えてください。 端末で実行する:

rake db:seed 
関連する問題