当我开发时,我会从硬盘中提供静态文件,当他们开始制作时,他们会从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
命令是否正在访问代码?
答案 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
...