我正在尝试将本地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上迁移主机
确保计算机上存储在默认值~/.aws/
凭据设置为您为 heroku 配置创建的凭据。然后,还要确保使用这些凭据和配置创建签名 URL。我必须将默认凭据设置为我在 heroku 配置中输入的凭据。然后,我还必须在~/.aws/config
中设置默认区域以匹配存储桶位置。之后应该工作。
如果您使用的是 mac 或 linux.
对不起 Windows 人,这里有一些说明。我认为这是类似的东西。
- 在 AWS 上的 IAM 中创建新的访问 ID 和密钥
- 将 heroku 配置设置为使用这些凭据
heroku config:set AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy
- 可选(您可能也必须在 heroku 配置中设置存储桶名称(
- 在计算机上,将刚刚创建的凭据设置为
~/.aws/credentials
中的默认值 - 在您的计算机上设置与您的存储桶相对应的默认区域
~/.aws/config
- 创建签名网址
aws s3 presign s3://your-bucket-address/your-object
- 运行还原
heroku pg:backups:restore '<SIGNED URL>' DATABASE_URL
有完全相同的错误,并进行了这 2 次调整。在 S3 控制台中,单击要用于备份的文件。您应该会看到文件的名称,后跟 4 个选项卡。在"常规信息"选项卡中,执行以下操作:
-
单击">公开">以使文件可供下载。
-
获取该对象的 URL,其中显示对象的 URL
(应该是类似
https://mybucket.s3.amazonaws.com/my.file
,您可以通过将该网址粘贴到新的 Chrome 标签页中并点击该网址来测试它是否有效。这应该会触发您的文件下载(
上一次检查工作后,您可以继续
heroku pg:backups restore 'https://mybucket.s3.amazonaws.com/my.file' DATABASE_URL
我遇到了同样的问题,发现问题是我将存储桶的区域设置为us-east
而不是us-east-1
。