我在我的开发数据库中使用大量数据运行rails 4应用程序(postgres with postgis)。为了编写测试,我需要来自开发db的数据。 不幸的是我不能使用加载器/种子脚本,因为数据来自配额限制的api。因此,收集数据需要相当长的时间,这不是测试所需要的。 因此,我想知道如何从开发数据库中复制数据进行测试?
最佳, 菲尔
答案 0 :(得分:0)
我通过创建一个Bash脚本并在ssh上使用数据库转储来实现这一目标。转储文件只是带有create或replace语句的文本,下面我的例子是使用MySql,我不得不使用sed来转换转义字符。我相信你可以和Postgres做类似的事情。作为备份的一部分,我还必须捕获用户使用rsync执行的维护图像。我正在将数据库加载到开发中,但它也可能是test.sqlite3或任何其他数据库。
# Get database
ssh root@mywebsite.com \
'mysqldump -t --replace --compact --extended-insert=FALSE -u root -pDBPassword db_name' | \
sed "s/\\\\'/''/g" | sqlite3 ~/websites/mywebsite/db/development.sqlite3
# Get images
rsync -z root@mywebsite,com:/var/www/mywebsite/public/images/*.jpg \
~/websites/mywebsite/public/images/
答案 1 :(得分:0)
Rails只是一个框架 - 它与您的实际数据没什么关系:
Rails内置的每个功能都旨在帮助实现更多功能 灵活的平稳地将数据输入到您的系统中。这意味着如果 你想为Rails应用程序传输大量数据,它会 在数据库级别执行此操作可能更有效率
我们之前已经迁移了很多数据库,这只是一个下载SQL文件的案例&然后传入新的db表。这对于不同的SQL变体会有所不同,但如果您想使用Postgres,那么您最好using pg_dump
& pgsql
to restore:
pg_dump dbname > outfile
psql dbname < infile