使用Django的collectstatic和boto S3,一段时间后会抛出“Error 32: Broken Pipe”错误。

12
我正在使用boto和S3存储我的Django网站的静态文件。在使用collectstatic命令时,它可以成功上传大部分文件,但在某个文件处停止并抛出"Error 32: Broken Pipe." 当我再次运行该命令时,它会跳过已经上传的文件并从离开的位置开始,然后在没有上传任何新文件的情况下抛出相同的错误。

3
对我而言,问题总是停留在jquery.js这个文件。 - Kyle Falconer
1
到目前为止,这个问题和提供的答案似乎与问题621上的内容相似。 - Kyle Falconer
1
@KyleFalconer,我也是在jquery.js处停止了! - BenWurth
3
我认为问题出在 jQuery 比其他项目要大(约 350 KB),导致了超时。我在上传图片时也遇到了同样的问题。 - Kyle Falconer
4个回答

10

关键似乎在于指定你的存储桶位于哪个AWS端点。我尝试了很多不同的方法,但最终对我有用的解决方案是按照文档中所述为boto创建一个配置文件。

以下是我在~/.boto创建的配置文件内容:

[Credentials]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[s3]
host=s3-us-west-2.amazonaws.com

1
这也解决了我的一个错误400:错误请求的问题。具体来说,是关于将s3主机添加到〜/ .boto文件中的部分。 - Julia Ebert

3

BenWurth的回答很好,但如果你像我一样不想添加配置文件,你可以选择使用django-storages更好维护的表亲"django-storages-redux",并在settings.py中添加额外的环境变量。

pip uninstall django-storages (if you have this installed)
pip install django-storages-redux

然后在settings.py中进行配置。

AWS_S3_HOST = 'YOUR-AWS-ENDPOINT' #in my case 's3-us-west-2.amazonaws.com'

那么一切都应该很好。


0

我也遇到了同样的问题,只是针对jquery.js文件,可能是因为像@Kyle Falconer所说的那样太大了。在我的情况下,这与地区无关。我通过将文件复制到需要的S3存储桶中来“解决”了这个问题。


0

虽然这是一个老问题,但我很容易地解决了它,只需添加环境变量“AWS_DEFAULT_REGION”,并设置为我使用的区域(例如“ap-southeast-2”)。这在本地(Windows)和 AWS EB 上都有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接