collectstatic和DEBUG

时间:2016-01-05 15:52:45

标签: django amazon-s3 django-staticfiles

当我开发时,我会从硬盘中提供静态文件,当他们开始制作时,他们会从S3获得服务。我通过这个实现了这个目标:

DEBUG = False

if 'DYNO' not in os.environ:
    DEBUG = True

...

if DEBUG:
    STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
    STATIC_URL = BASE_DIR + '/path/to/stuff/'
else:
    STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
    STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN

因此,如果此代码在Heroku上运行,则从S3获取,或者如果在本地,它从path/to/stuff获取。当我运行collectstatic时会出现问题,它使用StaticFilesStorage收集并且不会推送到S3。会有办法解决这个问题吗?也许检查collectstatic命令是否正在访问代码?

2 个答案:

答案 0 :(得分:3)

运行任何管理命令时,您都可以specify the settings file使用。

例如,如果您的settings_prod.py具有正确的静态文件设置,那么您将运行:

./manage.py collectstatic --settings=settings_static.py

在您的情况下,您可以通过运行带有DYNO环境变量集的collectstatic管理命令来获得所需的行为(因为这意味着DEBUG=False)。

DYNO='1' ./manage.py collectstatic

或者,您可以查找不同的环境变量,例如COLLECTSTATIC,并相应地设置静态文件设置。

答案 1 :(得分:0)

您可以在settings.py中查看主机名:

HOSTS = ['mac.loc', 'my.dev', ...]

...

if socket.gethostname() in HOSTS:
    # local settings
    ... 
else:
    # remote settings
    ...