将rails db解压缩到JSON文件

时间:2013-06-01 19:33:52

标签: ruby-on-rails json sqlite dump ruby-on-rails-4

如何将rails sqlite3 db中的数据提取到文件中?

我正在使用rails 4.

我想提取数据库中的所有数据,以便稍后在重置数据库时或者当我切换到不同类型的数据库时重新加载它。

5 个答案:

答案 0 :(得分:5)

使用“yaml_db”gem。 https://github.com/ludicast/yaml_db

rake db:data:dump

转储数据 (转储后数据存储在单独的文件中) 和

rake db:data:load

将数据加载到其他数据库

答案 1 :(得分: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复制到db/development.sqlite3.backup即可。如果要恢复它,只需将其复制回cp -f db/development.sqlite3.backup db/development.sqlite3即可。请记住,.dump生成带有插入和创建语句的ASCII文本文件,您无法在提取它的数据库中恢复它,因为它会尝试复制记录。

答案 2 :(得分:2)

只需创建数据库的数据库转储文件,并在需要时使用它。

假设您要转储db/development.sqlite3的数据库, 这直接来自Sqlite3 Help

  

使用“.dump”命令转换数据库的全部内容   到一个ASCII文本文件。此文件可以转换回   数据库通过管道返回到sqlite3。

创建转储文件:

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

恢复转储文件:

zcat dev.dump.gz | sqlite3 development.sqlite3

答案 3 :(得分:2)

您可以在 seeds.rb

中简单地写下这一行
File.open("post.json", "w") { |f| f.write Post.all.to_json }

此处Post应替换为您的模型名称。 然后在终端运行:

rake db:seed

答案 4 :(得分:0)

我曾经使用用户友好的phpmyadmin导出将所有数据库提取到json。它可以轻松地为您的数据库导出json数据。希望这会帮助你。

转到phpmyadmin

export / type json