我正在尝试将Django / React应用程序部署到AWS。我有一个问题,即服务器未拾取静态文件。我认为我已正确配置了所有内容,但未显示任何内容。我不确定是否错过了某个步骤,因为它似乎可以在PythonAnywhere上正常运行,但不能在AWS上正常工作。
这是我的设置。py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
我运行了python manage.py collectstatic
,该文件将我的文件生成到根目录中。输出static files copied to '/home/ubuntu/test/test/static'
。
我在控制台中收到的错误如下GET http://ec2-18-217-253-182.us-east-2.compute.amazonaws.com:5000/static/assets/vendor/bootstrap/css/bootstrap.min.css net::ERR_ABORTED 404 (Not Found)
我希望有人遇到同样的问题,因为SO上的其他几种解决方案都没有解决问题。这是当前的文件结构
test/
├── test/
├── frontend/
└── static/
答案 0 :(得分:-3)
您使用过Create React App吗?如果是这样,您将必须配置your PUBLIC_URL
指向正确的文件夹。
由于我不知道您确切的Django设置,因此需要考虑以下其他事项:
正确的URL(2.1语法)
urlpatterns += [
re_path(r'(?P<path>.*)', TemplateView.as_view(template_name='index.html'), name='home')
]
更正静态文件URL:
# Static files (CSS, JavaScript, Images)
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'media'
BASE_DIR = Path(__file__).resolve().parent.parent
STATICFILES_DIRS = [BASE_DIR.parent / 'build' / 'static']
正确的S3存储桶配置:
# utils.py
from storages.backends.s3boto3 import S3Boto3Storage
def StaticRootS3BotoStorage(): return S3Boto3Storage(location='static')
def MediaRootS3BotoStorage(): return S3Boto3Storage(location='media')
和
# conf.py
import os
from django.core.exceptions import ImproperlyConfigured
def get_env_variable(var_name):
"""Get the environment variable or return exception."""
try:
return os.environ[var_name]
except KeyError:
error_msg = 'Set the {} environment variable'.format(var_name)
raise ImproperlyConfigured(error_msg)
AWS_ACCESS_KEY_ID = get_env_variable("ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = get_env_variable("SECRET_ACCESS_KEY")
AWS_S3_SIGNATURE_VERSION = 's3v4'
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_STORAGE_BUCKET_NAME = get_env_variable("AWS_BUCKET_NAME")
AWS_S3_CUSTOM_DOMAIN = '%s.s3.eu-central-1.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_LOCATION = 'static'
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'config.settings.aws.utils.StaticRootS3BotoStorage'
DEFAULT_FILE_STORAGE = 'config.settings.aws.utils.MediaRootS3BotoStorage'
MEDIA_URL = 'https://%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
MEDIA_ROOT = MEDIA_URL
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
作为参考,这是我使用的文件夹设置(以防您在使用路径时遇到麻烦)。在aws
中是conf.py
和utils.py
。