ali*_*lix 58 python django gunicorn
我想在localhost上的gunicorn下运行我的django项目.我安装并集成了gunicorn.当我跑:
python manage.py run_gunicorn
Run Code Online (Sandbox Code Playgroud)
它工作但没有任何静态文件(css和js)
我在settings.py中禁用了debug和template_debug(使它们成为假),但它仍然是相同的.我错过了什么吗?
我称之为静态:
{{ STATIC_URL }}css/etc....
Run Code Online (Sandbox Code Playgroud)
ran*_*lan 145
在开发模式下以及当您使用其他服务器进行本地开发时,请将此添加到您的url.py中
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# ... the rest of your URLconf goes here ...
urlpatterns += staticfiles_urlpatterns()
Run Code Online (Sandbox Code Playgroud)
更多信息在这里
在生产中你永远不会把枪炮放在前面.相反,你使用像nginx这样的服务器,它将请求分派给一个gunicorn工作者池,并提供静态文件.
看到这里
Cir*_*四事件 22
白噪声
发布v4.0
http://whitenoise.evans.io/en/stable/changelog.html#v4-0
Django的WSGI集成选项(涉及编辑wsgi.py)已被删除.相反,您应该将WhiteNoise添加到settings.py中的中间件列表中,并从wsgi.py中删除对WhiteNoise的任何引用.有关详细信息,请参阅文档.(纯WSGI集成仍可用于非Django应用程序.)
Pre v4.0
Heroku建议使用以下方法:https://devcenter.heroku.com/articles/django-assets :
您的应用程序现在将直接从Gunicorn生产静态资产.这对于大多数应用程序来说都是完全足够的,但顶级应用程序可能希望使用带有Django-Storage的CDN进行探索.
安装时间:
pip install whitenoise
pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)
wsgi.py:
import os
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "free_books.settings")
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
Run Code Online (Sandbox Code Playgroud)
在Django 1.9上测试过.
Ngu*_*aga 13
gunicorn应该用于服务python"应用程序"本身,而静态文件由静态文件服务器(如Nginx)提供.
这里有一个很好的指南:http://honza.ca/2011/05/deploying-django-with-nginx-and-gunicorn
这是我的一个配置的摘录:
upstream app_server_djangoapp {
server localhost:8000 fail_timeout=0;
}
server {
listen < server port goes here >;
server_name < server name goes here >;
access_log /var/log/nginx/guni-access.log;
error_log /var/log/nginx/guni-error.log info;
keepalive_timeout 5;
root < application root directory goes here >;
location /static {
autoindex on;
alias < static folder directory goes here >;
}
location /media {
autoindex on;
alias < user uploaded media file directory goes here >;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://app_server_djangoapp;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
一些说明:
结束时:虽然可以从gunicorn提供静态文件(通过启用仅调试静态文件服务视图),但这在生产中被认为是不好的做法.
我已经将它用于我的开发环境(使用gunicorn):
from django.conf import settings
from django.contrib.staticfiles.handlers import StaticFilesHandler
from django.core.wsgi import get_wsgi_application
if settings.DEBUG:
application = StaticFilesHandler(get_wsgi_application())
else:
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)
然后运行gunicorn myapp.wsgi.此作品相似到@ rantanplan的答案,但是,在运行静态文件,当它不运行任何中间件.
为了提供静态文件,正如Jamie Hewland 所说,通常使用 Nginx 将所有请求路由到 /static/
location /statis/ {
alias /path/to/static/files;
}
Run Code Online (Sandbox Code Playgroud)
换句话说,正如科里沃德所说的关于Gunicorn / Unicorn
并非旨在解决向客户提供文件所涉及的一系列问题
如果您考虑使用其他 WSGI 服务器(如 uWSGI 而不是 Gunicorn),则同样适用。在uWSGI 文档中
通过 uWSGI 提供静态文件是低效的。相反,直接从 Nginx 为它们提供服务并完全绕过 uWSGI
更简单的方法是使用WhiteNoise库使用 Python 为您的静态文件提供服务,该库非常容易设置(您可能希望使用 CDN,以便大多数请求不会到达 Python 应用程序)。正如米格尔德马托斯所说,你只需要
收集静电
python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)
安装白噪声
pip install whitenoise
Run Code Online (Sandbox Code Playgroud)
STATICFILES_STORAGE在settings.py中添加以下内容
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Run Code Online (Sandbox Code Playgroud)
将以下内容添加到MIDDLEWAREsettings.py 中(如mracette 所述,“根据 whitenoise 文档,您应该将中间件放在”之后django.middleware.security.SecurityMiddleware)
`MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
...
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50567 次 |
| 最近记录: |