使用AWS S3的Django Collectstatic不会复制正确的静态和媒体文件

时间:2016-12-17 05:05:22

标签: django amazon-s3 collectstatic

我正在尝试将所有静态和媒体文件复制到S3存储桶。不幸的是,尽管我的settings.py文件中提供了我的媒体根和静态根....

DEFAULT_FILE_STORAGE = 'jeffrey.aws_storage_classes.MediaStorage'
AWS_ACCESS_KEY_ID = 'keyhere'
AWS_SECRET_ACCESS_KEY = 'secretkeyhere'
AWS_STORAGE_BUCKET_NAME = 'bucketname'
STATICFILES_STORAGE = 'jeffrey.aws_storage_classes.StaticStorage'

AWS_S3_DOMAIN = "%s.s3.amazonaws.com" % AWS_STORAGE_BUCKET_NAME
STATIC_URL = "https://%s/static/" % AWS_S3_DOMAIN
MEDIA_URL = "https://%s/media/" % AWS_S3_DOMAIN

MEDIA_ROOT = u'/home/namehere/mysite/media'
STATIC_ROOT = u'/home/namehere/mysite/static'
来自我的django contrib文件夹的

....文件似乎正在被复制,而我在静态和媒体文件夹中的文件则没有。下面是我的bash控制台:

Type 'yes' to continue, or 'no' to cancel: yes
Copying '/usr/local/lib/python2.7/dist-        packages/django/contrib/admin/static/admin/css/fonts.css'
Copying '/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/img/icon-addlink.svg'
Copying '/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/img/icon-no.svg'
Copying '/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/img/inline-delete.svg'
....
....
Copying '/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg'
Copying '/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg'
61 static files copied.

1 个答案:

答案 0 :(得分:0)

我认为问题出在你的INSTALLED_APPS设置上。

从django contrib文件夹复制文件没有错 - 如果你的INSTALLED_APPS设置中有'django.contrib.admin',那么它将复制静态文件,如上所示。 (这是Django管理站点)。

如果您没有在INSTALLED_APPS中列出您的应用,那么它将跳过从您应用的文件夹中收集静态文件。我设法通过从此设置中删除我的应用名称来完全重现您的问题,毫无疑问,突然它只从django contrib复制文件并跳过我的应用程序静态文件。 因此,即使您的问题变得不同,这也会产生与您描述的相同的效果。

示例:在settings.py中,您需要确保看起来像这样:

INSTALLED_APPS = [
    # Add your apps here to enable them
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'storages',                     #Amazon S3
    'myapp',
]

请注意,'myapp'将是您应用的名称。