【问题标题】:django's collectstatic collects into unexpected directorydjango 的 collectstatic 收集到意外的目录中
【发布时间】:2019-07-05 08:50:32
【问题描述】:

我想将我的静态文件上传到 amazon s3 存储,但我无法阻止 django 将它们放在项目根目录的 staticfiles 目录中。我的 requirements.txt 中有 boto3 并设置了

STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

我已成功将 s3 与媒体文件设置到同一个存储桶(在不同目录下)。

当我注释掉 s3 设置时,Collectstatic 似乎也忽略了 settings.py 中的 STATIC_ROOT 变量。运行 python3 manage.py collectstatic 时,我希望它将静态文件收集到 STATIC_ROOT 中,正如它在此处的文档中所说的 https://docs.djangoproject.com/en/2.1/ref/settings/ (在 static_root 下)。但即使我给 STATIC_ROOT 一个不同的值,collectstatic 总是会收集到根目录下名为 staticfiles 的目录中。

STATIC_ROOT = os.path.join(BASE_DIR, 'this_is_not_used_by_collectstatic')

我的 s3 设置的其余部分:

# Amazon S3 
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']

AWS_STORAGE_BUCKET_NAME = 'my_bucket_name'
AWS_S3_REGION_NAME = 'eu-north-1'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_DEFAULT_ACL = None
AWS_LOCATION = 'static'

STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

# media
DEFAULT_FILE_STORAGE = 'korvir.storage_backends.MediaStorage'

【问题讨论】:

标签: django amazon-s3 boto3


【解决方案1】:

如果您使用的是django-heroku,并且您的代码中有以下内容,请按照说明:

django_heroku.settings(locals())

...然后它将覆盖您的STATIC_ROOT 设置。如果您想保留自己的STATIC_ROOT 设置,请确保在调用django_heroku.settings 之后设置STATIC_ROOT

【讨论】:

  • 我应该更清楚一点,即使我注释掉 STATICFILES_STORAGE,它仍然会忽略 STATIC_ROOT。
  • 啊,好的。感谢您的澄清。您能否再次检查以确保您的设置文件中只有 一个 STATIC_ROOT = 语句?
  • 只有一个条目
  • 好的,让我们看看设置是否被覆盖,或者是否被忽略。运行python manage.py shell打开一个Django shell,然后导入设置,并用from django.conf import settings; print(settings.STATIC_ROOT)打印出STATIC_ROOT的值。
  • 这会打印目录staticfiles的路径
猜你喜欢
  • 2016-02-27
  • 2016-04-07
  • 2014-11-17
  • 2015-10-29
  • 2018-04-24
  • 1970-01-01
  • 2018-02-20
  • 2012-09-11
  • 2020-10-07
相关资源
最近更新 更多