7

我正在尝试将本地 Postgresql 数据库导入 Heroku,我正在按照这些步骤https://devcenter.heroku.com/articles/heroku-postgres-import-export#import-to-heroku-postgres

我已经成功:

  • 创建了一个转储
  • 将其上传到 S3 存储桶
  • 从 AWS CLI 创建一个签名的链接
  • 运行命令heroku pg:backups:restore '<SIGNED URL>' DATABASE_URL(添加 -a 和我的应用程序名称)。

恢复备份的过程正确启动,但随后退出并显示以下代码:

 !    An error occurred and the backup did not finish.
 !
 !    Could not initialize transfer
 !
 !    Run heroku pg:backups:info r011 for more details.

打开日志显示:

Database:         BACKUP
Finished at:      2020-01-09 18:49:30 +0000
Status:           Failed
Type:             Manual
Backup Size:      0.00B (0% compression)

=== Backup Logs
2020-01-09 18:49:30 +0000 Could not initialize transfer

我试过了:

  • 将文件重新上传到存储桶,
  • 生成一个新的签名链接,
  • 将应用程序置于维护模式,
  • 我在我的 IAM 管理服务中创建了一个具有完全 S3 访问权限的用户,并将凭证保存在应用程序环境中,如https://devcenter.heroku.com/articles/s3

不知道从这里去哪里,但会感谢任何帮助。(我正在进行业余爱好计划,因此我无法向 Heroku 寻求帮助)

编辑:我也试过:

  • 删除和重新创建 S3 存储桶
  • 安装 AWS CLI 的版本 1 以查看预签名链接的结构是否已更改

编辑 2:由于我找不到解决方案,我暂时选择将主机完全迁移到 AWS

4

3 回答 3

5

确保您计算机上存储在~/.aws/默认值中的凭据设置为您为 heroku 配置创建的凭据。然后还要确保使用这些凭据和配置创建签名的 url。我必须将我的默认凭据设置为我放入 heroku 配置中的凭据。然后我还必须设置我的默认区域~/.aws/config以匹配存储桶位置。之后应该工作。

如果您使用的是 mac 或 linux,这里有一些说明。
对不起Windows人。我会假设它是类似的东西。

  1. 在 AWS 上的 IAM 中创建新的访问 ID 和密钥
  2. 设置 heroku 配置以使用这些凭据heroku config:set AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy
    • 可选(您可能还必须在 heroku 配置中设置存储桶名称)
  3. 在您的机器上,将您刚刚创建的凭据设置为默认值~/.aws/credentials
  4. 在您的机器上设置与您的存储桶对应的默认区域~/.aws/config
  5. 创建签名 URLaws s3 presign s3://your-bucket-address/your-object
  6. 运行还原heroku pg:backups:restore '<SIGNED URL>' DATABASE_URL
于 2021-01-19T18:40:47.050 回答
2

有完全相同的错误并进行了这 2 次调整。在 S3 控制台中,单击要用于备份的文件。您应该会看到文件的名称,后跟 4 个选项卡。在General information选项卡中,执行以下操作:

  1. 单击Make public以使文件可供下载。

  2. 获取该对象的 URL,其中显示对象的URL

    (应该类似于https://mybucket.s3.amazonaws.com/my.file,您可以通过将该网址粘贴到新的 Chrome 选项卡中并点击该网址来测试它是否有效。这应该会触发您的文件的下载)

一旦之前的检查工作正常,您可以继续

heroku pg:backups restore 'https://mybucket.s3.amazonaws.com/my.file' DATABASE_URL
于 2020-08-23T01:16:14.390 回答
0

我遇到了同样的问题,发现问题是我将存储桶的区域设置为us-east而不是us-east-1.

于 2020-08-15T19:06:55.960 回答