Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 有没有比Taps更快的方法从Heroku提取生产数据?_Ruby On Rails_Heroku - Fatal编程技术网

Ruby on rails 有没有比Taps更快的方法从Heroku提取生产数据?

Ruby on rails 有没有比Taps更快的方法从Heroku提取生产数据?,ruby-on-rails,heroku,Ruby On Rails,Heroku,我经常需要克隆生产数据来调查bug。即使数据库大小很小,heroku db:pull-taps也需要5分钟以上的时间,而且失败的几率很高。是否有其他方法来提取数据库 另外,您还可以使用其他流程/文章库。请查看。它已经取代了Heroku bundle命令,并将为您提供与mysqldump相当的postgres。这远比对大型数据集的点击更文明 heroku pgbackups:capture 将创建一个转储文件并存储它。要下载转储文件,您需要获得url heroku pgbackups:url b

我经常需要克隆生产数据来调查bug。即使数据库大小很小,heroku db:pull-taps也需要5分钟以上的时间,而且失败的几率很高。是否有其他方法来提取数据库

另外,您还可以使用其他流程/文章库。

请查看。它已经取代了Heroku bundle命令,并将为您提供与mysqldump相当的postgres。这远比对大型数据集的点击更文明

heroku pgbackups:capture
将创建一个转储文件并存储它。要下载转储文件,您需要获得url

heroku pgbackups:url b001 (or whatever the id number of the backup is)
这将返回一个url,您可以从中下载转储文件。如果需要,您可以将其粘贴到Firefox中,或者按照他们的建议使用curl/wget。使用pg_restore将转储文件加载到数据库中,如文档中所述:

pg_restore --verbose --clean --no-acl --no-owner -h localhost -U test_user -d myapp_development /home/mike/Downloads/b001.dump

pg_restore:连接到数据库进行恢复

Mike的正确做法是这样做的。使用PGBackups创建备份时,可以访问标准pg_转储文件。Dev Center PGBackups文章的相关部分。

我创建了一个shell脚本,根据Mike Williamson的回答自动执行此过程

脚本更新,截至2015年1月

第一部分是由于运行在不同的计算机上,因此我的Postgres dbs有不同的名称

#!/bin/bash

# Run the following command: bash update_local_db.sh

# Getting computer name, which is the same as username in Postgres db
echo "Please enter name of Computer"
read input_variable
echo "You entered: $input_variable"

# Make a backup on Heroku
heroku pgbackups:capture --app APP_NAME
echo "== Created a new backup =="

# Download the backup and name it latest.dump
curl -o latest.dump `heroku pgbackups:url --app APP_NAME`
echo "== Downloaded the backup =="

# Restore local db with latest.dump
pg_restore --verbose --clean --no-acl --no-owner -h localhost -U $input_variable -d my_db_name latest.dump
echo "== Replaced db with downloaded =="

# Delete downloaded db latest.dump
rm -f latest.dump
echo "== Deleted downloaded db =="
echo "== Done! :) =="

这个帖子现在已经很老了


现在最新也是最简单的方法是使用Heroku的

这里是我编写的一个脚本,它使用pg:pull,正如Lomefin所提到的,从Heroku中拉取一个db,并用它替换一个本地db:

#!/bin/bash

export MAIN_DB=NAME_OF_LOCAL_DB
export TMP_DB=NAME_OF_TEMPORARY_DB

function delete_db () {
    psql -d ${1} -c "SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = '$1'
  AND pid <> pg_backend_pid();" || true

    dropdb ${1} || true
}

delete_db ${TMP_DB}

heroku pg:pull DATABASE_URL ${TMP_DB} || exit 1

delete_db ${MAIN_DB}

psql -c "ALTER DATABASE $TMP_DB RENAME TO $MAIN_DB;"

由于pg:pull克隆到一个新的数据库,您的工作不会被中断,只有当它重命名数据库,这需要几分之一秒。当然,脚本可以根据您的喜好轻松定制。

我已经知道pg备份,但不知道如何使用它集成本地pg数据库。你能详细介绍一下你的答案吗?杰克,我已经在我的答案中添加了一些细节。试试看,让我知道它是否适合你。我要看看UTF8的东西,当我弄明白它的时候我会更新的。谢谢迈克,我今天会查出来的。非常感谢你的回答。我是heroku和postgres的新手,不确定这是如何实现的创建脚本,它比db:pull快得多,是解决找不到水龙头问题的方法。我得到的是以空格分隔的heroku PGBackup的输出,而不是|,因此需要使用“cut-d”。我还希望在保存新的Heroku备份后销毁旧的Heroku备份,而不是在之前。由于Heroku现在在保存备份方面有一个宽松的政策,我们可以完全跳过删除。我不得不将分隔符改为空格。例如,赫罗库·佩奇(heroku pgbackups)| tail-n1 | cut-d-f 1True。但关键是pg:pull比下载DB转储并导入要慢得多。
#!/bin/bash

export MAIN_DB=NAME_OF_LOCAL_DB
export TMP_DB=NAME_OF_TEMPORARY_DB

function delete_db () {
    psql -d ${1} -c "SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = '$1'
  AND pid <> pg_backend_pid();" || true

    dropdb ${1} || true
}

delete_db ${TMP_DB}

heroku pg:pull DATABASE_URL ${TMP_DB} || exit 1

delete_db ${MAIN_DB}

psql -c "ALTER DATABASE $TMP_DB RENAME TO $MAIN_DB;"