Django collectstatic无法在S3上进行生产,但是相同的设置在本地有效 - python

我一直在进行一些设置,以创建更定义的本地和生产环境,而且我一定搞砸了。

以下是大多数相关设置。如果将production.py设置(当前仅包含与AWS相关的设置)移动到base.py,则可以从本地计算机上更新S3。同样,如果我将这些AWS设置保留在base.py中并推送到生产环境,则S3会适当更新。另外,如果我从production.py打印一些内容,它也会打印。但是,如果我在manage.py上将production.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')

production.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设置为不等于cobev.settings.production用于wsgi.py文件。

我认为您应该使用常规Django方式,名为DJANGO_SETTINGS_MODULE的OS环境变量来管理您的设置文件。

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

Django Python如何在给定两个时间字符串的情况下计算时差 - python

在Django Python中,我有2个HH:mm时间字符串,如何获取持续时间(差异)?例如:15:30 and 11:00 ---> difference is 04:30 19:28 and 12:25 ---> difference is 07:03 参考方案 我们可以首先使用以下命令将字符串解析为datetime对象:from datet…

如何从Django模型生成文档? - python

目前,我们将Sphinx用于项目文档和Django模型字段描述。主要问题是:更改模型后,我们手动更新了Sphinx文档,有时会忘记/错过文档中的某些字段。有一些用于基于Django模型生成文档的工具吗? 参考方案 documentation说: Django的文件使用Sphinx文件系统, 转是基于docutils的。基本思想是格式化 纯文本文档已转换为HT…

django-compressor未与django-shop一起安装 - python

我无法使用django-shop安装django-compressor。出现这样的错误。Failed building wheel for rcssmin ================================= Failed building wheel for rjsmin -----------------------------------…

如何在Django中获取视图函数的URL路径 - python

举个例子:view.pydef view1( request ): return HttpResponse( "just a test..." ) urls.pyurlpatterns = patterns('', url( r'^view1$', 'app1.view.view1…

Django表单;使用ModelForm覆盖选择 - python

我想做的是根据页面隐藏或显示一些选择。例如,models.pyUSA = 'usa' FRANCE = 'france' CHINA = 'china' GERMANY = 'germany' SPAIN = 'spain' TOPICS = ( (USA, …