mba*_*tas 7 django heroku foreman
我有相反的问题中所描述的这个问题.
当服务器启动时,我的Django站点可以正常工作,manage.py runserver但在启动服务器时不会提供静态文件foreman start.
我的目录结构:
project_name/
project/
settings.py
...
app/
...
venv/
...
public/
static/
# static files go here #
media/
...
Procfile
requirements.txt
manage.py
Run Code Online (Sandbox Code Playgroud)
Procfile(如Djokuo on Heroku入门教程中所述):
web: gunicorn project.wsgi
Run Code Online (Sandbox Code Playgroud)
settings.py:
import os
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
UP_ROOT = os.path.abspath(os.path.join(SITE_ROOT, '..'))
...
MEDIA_ROOT = UP_ROOT + '/public/media/'
...
STATIC_ROOT = UP_ROOT + '/public/static'
...
STATIC_URL = '/static/'
...
STATICFILES_DIRS = (
UP_ROOT + '/public',
UP_ROOT + '/public/static',
)
Run Code Online (Sandbox Code Playgroud)
就像我说的,所有这些都可以runserver在我的本地机器上正常工作,但不能正常工作foreman start.
如果要求,将发布更多信息.
Django的命令的runserver提供静态文件,因为django.contrib.staticfiles通过对您项目的静态文件夹自动搜索(提供了一些先决条件到位这里),然后返回他们在静态请求.
然而,Foreman是Django的独立工具,对Django的内部结构一无所知.所以,你需要一些额外的帮助.两个不错的选择是dj-static或whitenoise.可以使用pip安装.您需要对wsgi.py文件进行一些小修改,如您选择的设置说明中所述(请参阅链接).
dj-static和whitenoise在settings.py文件中查看静态文件的STATIC_ROOT.这与Django的runserver不同,后者自动遍历项目中的各种静态文件夹.这意味着您需要在dj-static或whitenoise找到它们之前运行manage.py collectstatic(将静态文件收集到STATIC_ROOT中).
跑:
pip install whitenoise
Run Code Online (Sandbox Code Playgroud)
将wsgi.py修改为如下所示:
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(get_wsgi_application())
Run Code Online (Sandbox Code Playgroud)
然后静态文件将工作:
# Run collectstatic before foreman whenever you've changed static files
python manage.py collectstatic
foreman start
Run Code Online (Sandbox Code Playgroud)
Foreman需要比runserver更多的努力.但是,工头可以非常模仿生产环境,而runserver则不会(希望它不会).在许多情况下,在生产中使用dj-static或whitenoise是一个不错的选择.因此,使用带有dj-static或whitenoise的工头开发将让您放心,当您的网站进入生产阶段时,主要问题不会让您感到惊讶.你没有从其他一些选项中得到这种保证(例如将'django.views.static.serve'添加到urls.py).
这有点像黑客,但我通过将此路由添加到网址来使其工作:
# serve static
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1757 次 |
| 最近记录: |