安装了一个Odoo8的测试环境,给不同的客户建立了不同的数据库,为了不让客户访问时看到其它数据库选择,需要把选择数据库的功能隐藏起来。每个客户分配一个域名,用不同的域名来自动关联数据库。
在之前openerp7应用中,有人提到了通过修改源码的方式来实现,但实际体验不太好,后来看了odoo8中的代码,实际上系统本身就已经提供了类似的功能。
def db_filter(dbs, httprequest=None): httprequest = httprequest or request.httprequest h = httprequest.environ.get('HTTP_HOST', '').split(':')[0] d, _, r = h.partition('.') if d == "www" and r: d = r.partition('.')[0] r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d) dbs = [i for i in dbs if re.match(r, i)] return dbs
我把参数文件中的dbfilter=.*改为了dbfilter=^%d$,表示数据库的名称就是二级域名名称。然后我在浏览器中输入http://db1.xxx.cn ,系统并没直接跳到db1数据库,而是进入到了初始的创建数据库页面。额,是咋回事呢?
通过调试,发现上面函数中的h并不是输入的db1.xxx.cn,而是odoo8,真是奇了怪了。看起来odoo8比较面熟,想到跟nginx中的某个名称相同。因为我安装了nginx进行反向代理,把所有80端口的访问重定向到了8069端口,主要参数配置如下:
upstream odoo8 { server 127.0.0.1:8069; } upstream odoo8-im { server 127.0.0.1:8072; } server { listen 80; server_name _; add_header Strict-Transport-Security max-age=2592000; location / { proxy_pass http://odoo8; } location /longpolling { proxy_pass http://odoo8-im; } location /web/static/ { proxy_cache_valid 200 60m; proxy_buffering on; expires 864000; proxy_pass http://odoo8; } }
upstream odoo8 { server 127.0.0.1:8069; } upstream odoo8-im { server 127.0.0.1:8072; } server { listen 80; server_name _; add_header Strict-Transport-Security max-age=2592000; location / { proxy_set_header Host $http_host; proxy_set_header X-Forward-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://odoo8; } location /longpolling { proxy_set_header Host $http_host; proxy_set_header X-Forward-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://odoo8-im; } location /web/static/ { proxy_set_header Host $http_host; proxy_set_header X-Forward-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_cache_valid 200 60m; proxy_buffering on; expires 864000; proxy_pass http://odoo8; } }
现在终于可以愉快滴跟odoo玩耍了。