我有Django应用程序,我想从AWS s3存储桶提供静态和媒体文件,但在配置后,只有媒体文件从s3提供,静态文件在本地提供。当我收集静态时,所有静态文件都收集在本地静态文件夹中。没有文件发送到AWS s3存储桶。我不得不手动将它们复制到s3。
我使用Django==2.1.4,boto3==1.18.3,django-store==1.11.1
下面我展示了settings.py中的配置(一些不相关的部分被删除,我评论STATIC_URL和我尝试过的MEDIA_URL值)我尝试了例如本主题Django和S3 Bucket AWS Admin Static文件中的建议。
import os
from decouple import config
import django_heroku
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)
ALLOWED_HOSTS = ['yogahouse-ap.herokuapp.com']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'core',
'storages',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'yogahouse.urls'
IMAGEKIT_URL = config('IMAGEKIT_URL')
AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')
AWS_S3_REGION_NAME = 'eu-central-1'
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'
AWS_STATIC_LOCATION = 'static'
DEFAULT_FILE_STORAGE = 'yogahouse.storages.MediaStorage'
AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com"
AWS_IS_GZIPPED = True
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
# STATIC_URL = f"{IMAGEKIT_URL}/static/"
# STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/"
MEDIA_URL = '/media/'
# MEDIA_URL = f"{IMAGEKIT_URL}/media/"
# MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
django_heroku.settings(locals())
瑜伽馆。存储。py:
from storages.backends.s3boto3 import S3Boto3Storage
class MediaStorage(S3Boto3Storage):
location = 'media'
file_overwrite = False
class StaticStorage(S3Boto3Storage):
location = 'static'
file_overwrite = False
在settings.py
文件中尝试以下操作-
STATICFILES_DIRS = [
'mystatic',
]
AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')
AWS_LOCATION = 'static'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
# STATIC_URL = '/static/'
分享我从这个视频中学习和实施的知识-https://youtu.be/4VIkWSZKMRA
编辑:为STATICFILES_DIRS
添加了值。我注意到您没有为此设置值。
主要问题是:
ALLOWED_HOSTS = ['yogahouse-ap.herokuapp.com']
django_heroku.settings(locals())
添加参数staticfiles=False后,文件从s3提供。
对于允许的\u主机=[]静态文件也将从s3提供。
django_heroku.settings(locals(), staticfiles=False)
url仍然不正确,因为我在s3中有静态文件“静态”文件夹。此设置修复它:
AWS_LOCATION = 'static'
问题内容: 我正在使用,我的django应用的结构如下 的是 在我尝试使用它为: 但是它没有加载并给出错误 我跑去收集所有静态文件。 为什么要加载CSS文件?是否缺少任何配置? 请提出建议。 问题答案: 根据文档正确的方式来加载静态文件是 这会工作
最后,当我启动spring boot web application时,我发现,当我转到url时,我得到了我的angular应用程序。 接下来的问题是:spring-boot如何理解它应该从依赖项服务静态内容?注意,我在spring-boot模块资源中没有静态文件夹。
问题内容: 让我感谢Stack Overflow社区的人们帮助我解决了各种Django和Apache(带有mod_wsgi)错误。到目前为止,我已经问了5个相关的问题,现在我越来越接近在生产站点上发布内容了! 我读到有关,(很快就会过时),并在Apache配置中设置。我试图逐个测试每个解决方案,但是我什么也做不了。 这是我的管理网站现在的样子 我也有一个奇怪的情况,那就是 任何子 域都可以在我的服
Spring boot不提供放置在jar中的静态文件。 我有一个后端应用程序,我决定添加前端。设置任务以将静态前端文件复制到 。在SO上经历了一堆答案,他们都建议静态内容(索引.html,.js和.css文件)应该驻留在或下,我都尝试过。我打开构建的.jar,静态文件在那里,但是使用启动应用程序.jar并打开给了我默认的白标错误页面。我的应用程序工作,因为我可以访问我在其上运行的API。应用程序没
问题内容: 我正在为Django使用apache + mod_wsgi。 并且所有css / js / images都通过提供。 出于某种奇怪的原因,当其他人/朋友/同事尝试访问该网站时,jquery / css不会为他们加载,因此页面看上去很混乱。 我的html文件使用这样的代码- 我的nginx配置是这样的 有一个目录,其中有相应的&目录。 奇怪的是,当我访问它们时页面显示正常。 我已经清除了
关于静态和动态之间的区别,我仍然有点困惑。据我所知,动态使用对象,而静态使用类型,动态在运行时解析,而静态在编译时解析。所以this.lastName.compare(s1.last名称)不应该使用动态绑定吗? 钥匙compareTo(list[position-1])使用动态绑定 (this . last name . compare to(S1 . last name))为什么使用静态绑定?