gpt4 book ai didi

python - Djangocollectstatic 无法在 S3 的生产环境中工作,但相同的设置在本地工作

转载 作者:行者123 更新时间:2023-12-03 00:21:41 24 4
gpt4 key购买 nike

我一直在调整一些设置以创建更明确的本地和生产环境,但我一定搞砸了一些事情。

以下是大部分相关设置。如果我将 production.py 设置(目前仅包含与 AWS 相关的设置)移至 base.py,我就可以从本地计算机更新 S3。同样,如果我将这些 AWS 设置保留在 base.py 中并推送到生产环境,S3 也会相应更新。此外,如果我从 Production.py 打印一些内容,它也会打印。但是,如果我将 production.py 设置为 manage.py 上的“本地”设置,或者当我使用如下所示的设置推送到 Heroku 时,S3 不会更新。

我的设置不正确怎么办? (嗯,我确定一些事情,但具体是导致 S3 不更新?)

这是一些相关代码:

__init__.py(位于包含基础、本地和生产的目录中)

from cobev.settings.base import *

base.py

INSTALLED_APPS = [
...
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
...
'storages',
]

...

STATIC_URL = '/static/'

STATICFILES_DIRS = [os.path.join(BASE_DIR, "global_static"),
os.path.join(BASE_DIR, "media", )
]

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'

local.py

# local_settings.py
from .base import *

...

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

生产.py

from .base import *

# AWS Settings

AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = 'cobev'

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'

AWS_DEFAULT_ACL = 'public-read'

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

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

# End AWS

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cobev.settings.production")

application = get_wsgi_application()

from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)

manage.py

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cobev.settings.local")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)

最佳答案

好吧,让我尝试一下,正如问题评论中所发现的那样,您使用collectstatic进行S3更新,但这是一个使用manage.py调用的管​​理命令> 将 cobev.settings.local 设置为不等于用于 wsgi.pycobev.settings.product 的文件文件。

我认为您应该使用正常的 Django 方式、名为 DJANGO_SETTINGS_MODULE 的操作系统环境变量来管理您的设置文件。

当然,您应该能够在正在运行的任何生产环境中设置它。

关于python - Djangocollectstatic 无法在 S3 的生产环境中工作,但相同的设置在本地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59572706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com