V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jezal
V2EX  ›  Django

uwsgi 运行两个django 项目,urlconf 偶尔互相乱串,求解

  •  
  •   jezal · 2013-05-31 13:38:36 +08:00 · 3737 次点击
    这是一个创建于 4219 天前的主题,其中的信息可能已经有所发展或是发生改变。
    uwsgi 运行两个django project,一个是 engine,一个是 link,都在 /home/jason/ 下。
    访问 link 的时候,系统偶尔会载入 engine.url,访问 engine 的时候,系统偶尔会载入 link.url,导致出错。

    相关配置文件:
    #engine 项目 settings url配置如下:
    ROOT_URLCONF = 'engine.urls'

    nginx 的conf配置如下:
    location / {
    root /home/jason/link;
    index index.html index.htm;
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9090;

    uwsgi_param UWSGI_PYHOME /usr;
    uwsgi_param UWSGI_CHDIR /home/jason/link;
    uwsgi_param UWSGI_SCRIPT django-uwsgi;
    }

    #link 项目 settings url 配置如下:
    ROOT_URLCONF = 'link.urls'

    nginx 的conf配置如下:
    location / {
    root /home/jason/link;
    index index.html index.htm;
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9090;

    uwsgi_param UWSGI_PYHOME /usr;
    uwsgi_param UWSGI_CHDIR /home/jason/link;
    uwsgi_param UWSGI_SCRIPT django-uwsgi;
    }
    第 1 条附言  ·  2013-05-31 23:54:41 +08:00
    代码贴错了,现更正如下:
    #engine 项目 settings url配置如下:
    ROOT_URLCONF = 'engine.urls'

    nginx 的conf配置如下:
    location / {
    root /home/jason/engine;
    index index.html index.htm;
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9090;

    uwsgi_param UWSGI_PYHOME /usr;
    uwsgi_param UWSGI_CHDIR /home/jason/engine;
    uwsgi_param UWSGI_SCRIPT django-uwsgi;
    }
    11 条回复    1970-01-01 08:00:00 +08:00
    yueyoum
        1
    yueyoum  
       2013-05-31 13:42:26 +08:00
    KISS

    不同项目用独立的 uwsgi 来跑
    jezal
        2
    jezal  
    OP
       2013-05-31 13:47:45 +08:00
    @yueyoum 我是一个uwsgi hold 两个 django 项目,执行语句如下:
    uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost

    以前没有这种问题,自从我把 python2.6.6 升级到 python2.7.3,重装了uwsgi,就这样了。
    求若干项目用一个 uwsgi 来跑的解决方面。

    谢谢楼上。
    BOYPT
        3
    BOYPT  
       2013-05-31 13:51:13 +08:00
    uwsgi的vhost不是很靠谱,看着办吧……
    chon
        4
    chon  
       2013-05-31 13:54:19 +08:00
    第一个项目的目录怎么也是 root /home/jason/link; ?
    jezal
        5
    jezal  
    OP
       2013-05-31 14:00:43 +08:00
    @chon 贴错了,不好意思。第一个项目 engine 配置文件上是:

    location / {
    root /home/jason/engine;
    index index.html index.htm;
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9090;

    uwsgi_param UWSGI_PYHOME /usr;
    uwsgi_param UWSGI_CHDIR /home/jason/engine;
    uwsgi_param UWSGI_SCRIPT django-uwsgi;
    }
    chon
        6
    chon  
       2013-05-31 14:04:07 +08:00
    @jezal 那应该是没有问题的,我也是这么部署的,除了socket我用的是uwsgi.sock没用9090端口
    jezal
        7
    jezal  
    OP
       2013-05-31 14:07:23 +08:00
    @chon 就是啊,我之前好好的,就是升级了 python,重装了uwsgi 后,这么抽风起来了。不是知道是不是缓存之类的什么问题,这块自己又不是很懂,求高人指点!
    risent
        8
    risent  
       2013-05-31 20:23:14 +08:00
    @jezal 猜测一下,有可能就是cache导致的,因为Django缓存的时候是按照URL作为key处理的,但是URL中不包含域名,所以如果是不同的域名中有访问相同的路径,并且放在一起的话就可能会出现这种乱串的现象,解决的话很简单,只需在给对应的view加上vary_on_headers这个decorator.

    @vary_on_headers('host')
    jezal
        9
    jezal  
    OP
       2013-05-31 23:26:26 +08:00
    @risent 貌似不行,在 view 里加上以后,报错:
    name 'vary_on_headers' is not defined
    jezal
        10
    jezal  
    OP
       2013-05-31 23:50:03 +08:00
    @livid 遇到过类似问题么?知道解决方法么?谢谢!
    risent
        11
    risent  
       2013-06-01 10:45:41 +08:00
    @jezal 额,这个当然要先import一下呀

    from django.views.decorators.vary import vary_on_headers
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1695 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 146ms · UTC 16:36 · PVG 00:36 · LAX 08:36 · JFK 11:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.