当运行uwsgi时,我收到以下消息:
!!! no internal routing support, rebuild with pcre support !!!
Run Code Online (Sandbox Code Playgroud)
我已经使用以下命令安装了pcre(我认为):
Sudo apt-get install libpcre3 libpcre3-dev
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么即使在我安装了pcre软件包之后我仍然收到此消息,如果我需要重新安装uwsgi并激活pcre我该怎么做?
此外,内部路由是否重要?我认为它确实如此,否则uwsgi的制造商就不会提出这个消息.我运行Ubuntu 12.04 LTS.
谢谢您的帮助!
我有一个在http:// localhost:12345上运行的django应用程序.我希望用户通过网址http://my.server.com/myapp访问它.我使用nginx来反向代理,如下所示:
... ...
server_name my.server.com;
location /myapp {
rewrite /myapp(.*) $1 break;
... ... # proxy param
proxy_pass http://localhost:12345;
}
... ...
Run Code Online (Sandbox Code Playgroud)
问题是,当如上配置时,如何使我的响应页面中的URL具有前缀"/ myapp",以便nginx可以正确地将它们引导到myapp.例如,像"/ foo/far"这样的页面中的url应该更改为"/ myapp/foo/bar"以允许nginx代理到myapp.什么是正确的nginx配置用来实现这一目标?
我可以使用django的设置变量来指定根URL前缀,但它不能灵活,因为变量必须根据不同的nginx配置进行修改(比如有一天nginx可能会将郊区从"/ myapp"更改为"/anotherapp").
我想在我们的开发服务器上的子目录别名中运行一个简单的测试项目.基本设置是一个nginx,其位置将子目录中的所有内容传递给wsgi应用程序.
Django显然不明白它运行在子目录别名中,这完全破坏了URL的生成和解析.
我在文档中找不到任何类似前缀的设置,而我的谷歌也没有那么多帮助...所以我在这里问.
我找到的唯一一件事是设置FORCE_SCRIPT_NAME,它至少修复了URL的生成.(参见:http:
//docs.webfaction.com/software/django/config.html#mounting-a-django-application-on-a-subpath )遗憾的是,这并不能修复urlconf解析,即使提到的网站建议那.
是否可以在子目录别名中运行django应用程序,如果是,如何?
nginx配置:
server {
location /fancyprojectname/static {
alias /srv/fancyprojectname/static;
}
location /fancyprojectname/ {
uwsgi_pass unix://var/run/uwsgi/app/fancyprojectname/socket;
include uwsgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
所以,设置"uwsgi_param SCRIPT_NAME/fancyprojectname;" 在nginx位置使FORCE_SCRIPT_NAME变得不必要 - 遗憾的是,URL匹配仍然不起作用.
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', …Run Code Online (Sandbox Code Playgroud) 以下是相关的配置文件,也可以在http://dpaste.com/97213/上找到.
apache配置当前正在工作,因为访问'example.com/'会显示我放在文档根目录下的index.html文件.
我想在前缀'/ d'上提供Django/apps,因此'example.com/d/'会加载默认应用,'example.com/d/app3'会加载另一个,如在网址中配置的那样. PY.
服务Django,我在Linux上使用建议的mod_wsgi.
目前,我可以在'example.com/d'访问Ticket应用程序,但当@login_required装饰器尝试将我发送到登录页面时,我会收到'example.com/accounts/login',而不是预期的'example.com/d/accounts/login'.
由于默认应用程序正确加载,我不确定我在这里做错了什么,或者在生成网址时这是否是Django中的错误.
有什么建议?
编辑: 作为一个说明,如果我更改apache配置行:WSGIScriptAlias/d /home/blah/django_projects/Tickets/apache/django.wsgi到WSGIScriptAlias//home/blah/django_projects/Tickets/apache/django.wsgi该应用程序,评论和登录所有工作正常.即使转到'example.com/admin'也会加载管理员,虽然我已经断开了管理媒体,因此没有加载任何样式表.
---配置关注:
#
# /home/blah/django_projects/Ticket/urls.py
#
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^', include('ticket.urls')),
(r'^admin/', include(admin.site.urls)),
(r'^comments/', include('django.contrib.comments.urls')),
)
#
# /home/blah/django_projects/Ticket/apache/django.wsgi
#
import os, sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
sys.path.append('/home/blah/django_projects')
sys.path.append('/home/blah/django_projects/Tickets')
os.environ['DJANGO_SETTINGS_MODULE'] = 'Tickets.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
#
# /etc/apache2/sites-available/django_tickets_wsgi (apache conf)
#
NameVirtualHost *
<VirtualHost *>
Alias /media /home/blah/django_projects/Tickets/media
WSGIScriptAlias /d /home/blah/django_projects/Tickets/apache/django.wsgi
WSGIDaemonProcess exmaple_com user=blah group=blah …Run Code Online (Sandbox Code Playgroud) 环境:
我正在使用www.example.comDjango和nginx 的域,我想访问Django www.example.com/abc/,但我不知道如何设置子目录.
这是nginx conf文件:
server {
listen 80;
server_name www.example.com;
error_log /var/log/nginx/xxx.error_log info;
root /home/web/abc; # this is the directory of the django program
location ~* ^.+\.(jpg|jpeg|png|gif|css|js|ico){
root /home/web/abc;
access_log off;
expires 1h;
}
location ~ /abc/ { # I want to bind the django program to the domian's subdirectory
include uwsgi_params;
uwsgi_pass 127.0.0.1:9000;
}
}
Run Code Online (Sandbox Code Playgroud)
当我打开网站时www.example.com/abc/,django urls.py不匹配,它只匹配网站就好^index$.
如何修改nginx位置以将django设置为www.example.com/abc?
django ×4
nginx ×3
uwsgi ×2
apache ×1
deployment ×1
mod-wsgi ×1
pcre ×1
python ×1
subdirectory ×1