2

我在我的 Windows7 机器上开发了一个Rails 3.2.13带有开发数据库的应用程序。PostgreSQL我能够成功地将我的应用程序推送到heroku。但是,现在我被困在将现有数据迁移到 Heroku 的过程中。

我尝试按照 Heroku 的文档进行操作,但似乎无法使其正常工作。

这是我到目前为止所做的:

  1. 安装了 PG Backups heroku 插件
  2. 使用命令为我的开发数据库创建了一个转储文件 pg_dump -Fc --no-acl --no-owner -h localhost -U user myapp_development > myapp_development.dump
  3. 将转储文件上传到 AWS S3

在这一点上,我不确定如何继续,恢复转储文件并将其转换为 Heroku 中的生产数据库。有人可以帮忙吗?

PS我也试过这个heroku db:push命令,但它给出了以下错误:

连接数据库失败:Sequel::AdapterNotFound -> LoadError: cannot load such file -- pg

4

3 回答 3

3

a) 在 S3 上,您需要将转储文件设置为公开可读。

在 S3 存储桶中,右键单击您上传的转储文件,然后单击“公开”

现在,当您单击该文件的“属性”按钮(右上角区域)时,您将看到一个“链接”值。这意味着该文件现在可以从外部访问,包括 Heroku。

b) 您需要运行这样的命令来将此 pg 转储恢复到您的 heroku 数据库:

$ heroku pgbackups:restore DATABASE 'http://your.s3.domain.here.s3-us-xxxx-xx.amazonaws.com/myapp_development.dump' --app your-heroku-app-name

笔记:

  • 要运行“heroku”命令,您需要安装 heroku 工具带。

  • 请注意,步骤 (b) 中的 http URL 将与您在上面步骤 (a) 中的“属性”中看到的公共 URL 相同。

  • DATABASE 是这个命令的 heroku 关键字,应该按原样输入。它等同于您在运行时看到的 DATABASE_URL 配置设置:

$ heroku config --app your-heroku-app-name

于 2013-08-02T06:19:26.097 回答
1

现在您已经在 S3 上上传了转储文件,您需要告诉 pgbackups 加载该转储文件。

尝试这样的事情:

$ heroku pgbackups:restore DATABASE_URL 'https://s3.amazonaws.com/mybucket/path/to/myapp_development.dump'

我在这里找到了该命令:https ://devcenter.heroku.com/articles/heroku-postgres-import-export

编辑:

DATABASE_URL应该逐字逐句地工作。但是如果你想指定数据库,你可以使用heroku pg:info来找出你的数据库的名字。

对我来说,heroku pg:info打印:

=== HEROKU_POSTGRESQL_COPPER_URL (DATABASE_URL)
Plan:        Basic
Status:      available
Connections: 1
PG Version:  9.1.9
Created:     2013-03-06 17:21 UTC
Data Size:   9.5 MB
Tables:      9
Fork/Follow: Unsupported

所以,就我而言,我会使用:

$ heroku pgbackups:restore HEROKU_POSTGRESQL_COPPER_URL 'https://s3.amazonaws.com/mybucket/path/to/myapp_development.dump'
于 2013-08-02T05:07:19.410 回答
1

确保所有 gem 都安装在您的系统上。

sudo apt-get install sqlite3 libsqlite3-dev
sudo gem install sqlite3-ruby

gem install heroku taps sequel

sudo gem install tabs

sudo heroku db:push

或者

sudo heroku db:push –config herokuServerName

如果还是有问题。使用以下命令

heroku db:pull postgres://root:@localhost/db_name

别的

sudo heroku db:pull --confirm herokuDomanName postgres://userName:@localhost/Locadatabase

root 将是数据库用户名,db_name 是数据库名。

祝你好运.........!!

于 2013-08-02T05:07:52.713 回答