Int*_*nex 49
你应该将它们外部存储在像S3这样的服务上 - 而Heroku 可以提供静态文件,而不是设计用的.
这是关于S3入门的一个很好的入门读物:
https://devcenter.heroku.com/articles/s3
使用Django,储存http://django-storages.readthedocs.org/en/latest/index.html收集静态文件到您的S3存储,并相应地为他们服务.
这些是您需要为S3设置的必要设置:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'access-id'
AWS_SECRET_ACCESS_KEY = 'secret-key'
AWS_STORAGE_BUCKET_NAME = 'bucket-name'
AWS_PRELOAD_METADATA = True # necessary to fix manage.py collectstatic command to only upload changed files instead of all files
Run Code Online (Sandbox Code Playgroud)
MEDIA_ROOT和STATIC_ROOT分别由DEFAULT_FILE_STORAGE和STATICFILES_STORAGE取代,因此不需要.但是,您需要将MEDIA_URL和STATIC_URL设置为类似的内容
STATIC_URL = 'https://bucket-name.s3.amazonaws.com/static/'
ADMIN_MEDIA_PREFIX = 'https://bucket-name.s3.amazonaws.com/static/admin/'
Run Code Online (Sandbox Code Playgroud)
如果要将静态和媒体文件存储在不同的子文件夹中,这是一个很好的解决方案:https://stackoverflow.com/a/10825691/674794
您需要将MEDIA_URL和STATIC_URL设置为相应的新文件夹,例如
MEDIA_URL = 'https://bucket-name.s3.amazonaws.com/media/'
STATIC_URL = 'https://bucket-name.s3.amazonaws.com/static/'
Run Code Online (Sandbox Code Playgroud)
您还需要手动执行manage.py collectstatic并根据https://devcenter.heroku.com/articles/django-assets#disabling_collectstatic禁用Heroku的自动收集器,因为Heroku的collectstatic会在每次您将每个静态文件重新上载到S3时推送即使文件没有被修改,添加了大量的转移并请求加载到S3并减慢你的推送速度.
然后就像往常一样继续在模板中使用{{STATIC_URL}},你应该设置好!
<link href='{{ STATIC_URL }}css/styles.css' type='text/css' rel='stylesheet'>
Run Code Online (Sandbox Code Playgroud)
如果您想从简单开始并选择不立即采用该路线,您可以通过遵循Cesar在Heroku上提到的帖子- 在Django app中处理静态文件来快速破解您的网址配置,尽管会有显着的减少在应用程序性能.
归档时间: |
|
查看次数: |
8385 次 |
最近记录: |