【问题标题】:Rails - existing development Postgres database on local machine to HerokuRails - 本地机器上现有的开发 Postgres 数据库到 Heroku
【发布时间】:2013-08-03 05:58:27
【问题描述】:

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

我曾尝试关注 Heroku 的 documentation,但我似乎无法让它工作。

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

  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 中的生产数据库。有人可以帮忙吗?

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

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

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

      确保所有 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 是数据库名。

      祝你好运…………!!

      【讨论】:

        【解决方案3】:

        现在您已经在 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'
        

        【讨论】:

        • 这与我阅读的指南相同,但我不明白在“DATABASE”中放入什么(这是一个占位符,对吗?),以及如何获得 S3 转储的路径文件(我真的只是注册了aws,所以请原谅我的无知)
        • 哦,应该可以将DATABASE_URL 放在“DATABASE”的位置。但是,您也可以尝试运行 heroku pg:info 并使用顶部的数据库名称。我将编辑答案以包含一个示例。
        猜你喜欢
        • 1970-01-01
        • 2014-05-30
        • 2016-09-10
        • 2017-05-11
        • 1970-01-01
        • 2012-08-10
        • 1970-01-01
        • 1970-01-01
        • 2012-04-28
        相关资源
        最近更新 更多