Rails - 本地机器上现有的开发Postgres数据库到Heroku

时间:2013-08-02 04:34:50

标签: ruby-on-rails ruby database postgresql heroku

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

我试过跟随Heroku的documentation,但我似乎无法让它工作。

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

  1. 安装了PG备份heroku插件
  2. 使用命令pg_dump -Fc --no-acl --no-owner -h localhost -U user myapp_development > myapp_development.dump
  3. 为我的开发数据库创建了一个转储文件
  4. 将转储文件上载到AWS S3
  5. 此时,我不知道如何继续,恢复转储文件并将其转换为Heroku中的生产数据库。有人可以帮忙吗?

    P.S。 我也尝试了heroku db:push命令,但它出现了以下错误:

      

    无法连接到数据库:Sequel :: AdapterNotFound - > LoadError:   无法加载此类文件 - pg

3 个答案:

答案 0 :(得分: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网址与您在上面步骤(a)的“属性”中看到的网址相同。

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

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

答案 1 :(得分: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'

答案 2 :(得分:1)

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

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

OR

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是数据库名。

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