2017-02-09 74 views
1

我一直试图让这个设置了大约一个星期没有成功,所以我绝望的一些帮助在这里。我跟着这个网站上的教程:https://www.caktusgroup.com/blog/2014/11/10/Using-Amazon-S3-to-store-your-Django-sites-static-and-media-files/来设置我的Django应用程序,并试图在EB上部署,但它在遇到collectstatic命令时仍然失败。Django EB使用S3存储 - collectstatic失败

这里是我迄今为止..

错误回溯

Traceback (most recent call last): 
File "/opt/python/current/app/manage.py", line 23, in <module> 
execute_from_command_line(sys.argv) 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line 
utility.execute() 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/__init__.py", line 359, in execute 
self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/base.py", line 294, in run_from_argv 
self.execute(*args, **cmd_options) 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/base.py", line 345, in execute 
output = self.handle(*args, **options) 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 193, in handle 
collected = self.collect() 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 124, in collect 
handler(path, prefixed_path, storage) 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 337, in copy_file 
if not self.delete_file(path, prefixed_path, source_storage): 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 255, in delete_file 
if self.storage.exists(prefixed_path): 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/storages/backends/s3boto.py", line 454, in exists 
return k.exists() 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/boto/s3/key.py", line 539, in exists 
return bool(self.bucket.lookup(self.name, headers=headers)) 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/boto/s3/bucket.py", line 143, in lookup 
return self.get_key(key_name, headers=headers) 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/boto/s3/bucket.py", line 193, in get_key 
key, resp = self._get_key_internal(key_name, headers, query_args_l) 
File "/opt/python/run/venv/local/lib/python3.4/site-packages/boto/s3/bucket.py", line 231, in _get_key_internal 
response.status, response.reason, '') 
boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request 

settings.py

AWS_ACCESS_KEY_ID=os.environ.get('AWS_ACCESS_KEY_ID',None) 
AWS_SECRET_KEY=os.environ.get('AWS_SECRET_KEY',None) 
AWS_SECRET_ACCESS_KEY=os.environ.get('AWS_SECRET_KEY', None) 
AWS_STORAGE_BUCKET_NAME = '<my bucket name>' 
AWS_S3_HOST='s3.us-east-2.amazonaws.com' 
AWS_S3_CUSTOM_DOMAIN = '%s.s3.us-east-2.amazonaws.com' % AWS_STORAGE_BUCKET_NAME 

STATICFILES_LOCATION = 'static' 
STATICFILES_STORAGE = 'custom_storages.StaticStorage' 
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, STATICFILES_LOCATION) 

MEDIAFILES_LOCATION = 'media' 
MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, MEDIAFILES_LOCATION) 
DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage' 

custom_storage.py

from django.conf import settings 
from storages.backends.s3boto import S3BotoStorage 

class StaticStorage(S3BotoStorage): 
    location = settings.STATICFILES_LOCATION 

class MediaStorage(S3BotoStorage): 
    location = settings.MEDIAFILES_LOCATION 

我试过几个解决方案,包括但不限于:
- Using Django's collectstatic with boto S3 throws "Error 32: Broken Pipe" after a while

任何帮助表示赞赏。谢谢!

+0

看着教程和事实python 3,您是否安装过并将django-storage-redux添加到您的项目中? –

+0

继@AlanAvalos之后,您需要在项目中使用django-storage-redux。我的问题可以帮助你http://stackoverflow.com/questions/41427837/django-wont-serve-static-files-from-amazon-s3-with-custom-domain/41433454#41433454 –

+0

是的,我确实安装了django-storages -redux –

回答

1

你并不需要一个自定义的存储文件和你的水桶应该被重新命名为您的自定义域,例如:您使用files.domain.com

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 
AWS_ACCESS_KEY_ID = '###############' 
AWS_SECRET_ACCESS_KEY = '###################################' 
AWS_STORAGE_BUCKET_NAME = 'files.domain.com' 
AWS_AUTO_CREATE_BUCKET = False 
AWS_QUERYSTRING_AUTH = False 
AWS_S3_SECURE_URLS = False 
AWS_S3_CALLING_FORMAT = 'boto.s3.connection.OrdinaryCallingFormat' 
AWS_S3_HOST = '<your s3 region>.amazonaws.com' 
AWS_S3_CUSTOM_DOMAIN = AWS_STORAGE_BUCKET_NAME 

MEDIA_URL = 'http://%s/' % AWS_STORAGE_BUCKET_NAME 
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE 
STATIC_URL = MEDIA_URL 
+0

谢谢,但解决了上面的意见 –