将临时数据库从heroku复制到亚硝酸盐开发

时间:2014-08-13 11:52:22

标签: postgresql heroku nitrousio heroku-postgres

我发现了许多类似的问题 - 甚至添加了one similar non-dup的答案。但我无法看到或解决这个问题。这是核心问题:

我在Heroku上有一个临时服务器。我想将登台服务器数据库复制到Nitrous上的开发来解决问题。 Nitrous有Postgres 9,2,4,而Heroku有Postgres 9.3.3。

我的老板正在度假,我无权将Heroku登台服务升级为付费计划,我可以在其中进行分叉(然后使用分叉的Heroku数据库作为远程数据库进行开发)。

在早期的工作中,我使用heroku pg:push将开发数据库发送到暂存。没问题。但我无法使用heroku pg:pull - 它失败了,说:

pg_dump: server version: 9.3.3; pg_dump version: 9.2.4                                                                                                         
pg_dump: aborting because of server version mismatch

我尝试了rake db:structure:dump - 由于版本不匹配原因而失败。我隐约希望这会使用pg gem并且神奇地工作,忽略转速水平。嘿,如果你无知,魔术确实有效。

我有一个用于开发的Nitrous盒子,因为办公室防火墙阻止了,除了25,80和443之外几乎所有东西。所有有用的端口如22,5432,3000等都被阻止了。所以我在Nitrous上发展。它非常整洁。但是我从未想过Nitrous会有旧版本的Postgres,而且没有明显的方法来更新它。特别是鉴于Nitrous经常强调使用Heroku。

我尝试过使用更基本的命令:

pg_dump -h ec2-XX-XXX-XX-XXX.compute-1.amazonaws.com -p 5432 -Fc --no-acl --no-owner --compress 3 -o -U ${DBNAME} > dumpfile.gz

但是失败了(heroku pg:pull可能会在引擎盖下使用此命令)出于同样的原因 - 版本不匹配。

我意识到,如果我在开始时知道更多,我可以要求Heroku使用9.2。但我现在有一个9.3.3实例中的数据,如果我只有一台时间机器,我想要那些数据,而不是我想要的数据,我可以应对trousers of time paradoxes。 / p>

可能的解决方案?是否有另一个具有PG 9.3的Web IDE?是否有一个我无法找到的标志让PG Dump 9.2与up-rev DB一起工作?有没有办法将Nitrous升级到9.3?至少对于关键的pg_dump命令?

基于浏览器的IDE版本的Postgres(截至2014/08/13):

  • nitrous - 9.2
  • koding - 9.1
  • cloud9:9.3(是的! - 接我!接我!)

2 个答案:

答案 0 :(得分:0)

我花了几个小时来制定一个解决方案,使用不同的基于浏览器的IDE。 Cloud9提供Postgres 9.3,预安装在新VM中。

您需要向Heroku注册Cloud9 ID(在Cloud9控制台中找到SSH密钥,然后粘贴到Heroku中的ID SSH密钥中)。您需要从Cloud 9登录Heroku。

然后在Cloud9上使用pg_dumppg_restore,使用Heroku数据库作为源和目标。

pg_dump -h ec2-XX-XX-XX-XX.compute.amazonaws.com -p 5432 --no-owner --no-acl -Fc -o -U ${HEROKU_STAGING_DATABASE_USER} ${HEROKU_STAGING_DATABASE_NAME} > staging.dump
pg_restore -h ec2-XX-XX-XX-XX.compute.amazonaws.com -p 5432 --no-owner --no-acl --clean --verbose -d ${HEROKU_DEV_DATABASE_NAME} -U ${HEROKU_DEV_DATABASE_USER} < staging.dump

在您的开发环境中,请确保更新config / database.yaml(或您的Web应用程序需要的任何内容)以使用Heroku远程数据库服务。

Simples。最终

答案 1 :(得分:0)

我遇到了这个问题,然后用盲法魔法解决了

  1. 从Heroku postgres仪表板下载recent.dump文件
  2. 将该文件移至Nitrous框(并进入app目录)
  3. 按照此处的说明操作: https://stackoverflow.com/a/11391586/3850418

    pg_restore -O -d MY_APPNAME_DEV recent.dump

  4. 我收到了一些警告,但它似乎有效,至少足以满足我的开发/测试目的。

相关问题