ODOO中通过域名来自动选择数据库

安装了一个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  

 

从以上代码可以看出,在过滤数据库名称时,系统提供了两个变量(%h,%d),%h是域名,%d是二级域名,如果二级域名是www,则%d是域名中间的部分。所以我们可以通过设计参数文件中dbfilter的内容来达到通过域名自动选择数据库的目的。

 

 

我把参数文件中的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;  

}  

}  

 

这里可以看出来,因为用了nginx进行反向代理,在转到8069端口时使用了http://odoo8,所以odoo中取得的域名变成了odoo8,这个问题怎么办?想了想看能不能在nginx方面调整配置,将客户端的域名传导到odoo中,看来我们遇到的问题nginx都已经帮我们想到了,通过查询相关资料,将nginx参数调整为如下内容:

 

 

 

 

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;  

}  

}  

 

增加了proxy_set_header的设置,重新启动nginx,在浏览器输入http://db1.xxx.cn,odoo就进入了db1数据库,输入http://db2.xxx.cn,系统就进入了db2。

 

 

现在终于可以愉快滴跟odoo玩耍了。

时间: 2024-10-28 03:50:29

ODOO中通过域名来自动选择数据库的相关文章

input file元素 自动选择数据库中上传的文件

问题描述 有一个文件上传界面.<inputtyoe='file'>这个元素.用这个元素完成文件的上传.文件展示界面有编辑功能.上传文件后,点击编辑的话.要求如果已经上传过文件到服务器.那么编辑界面打开的同时,file元素自动选中上次上传的文件.新人!多谢帮助知道的说下相关的资料吧. 解决方案 解决方案二:这样的话别打开local文档,直接下载网上的文件用于编辑解决方案三:这样的话别打开local文档,直接下载网上的文件用于编辑解决方案四:引用1楼shoppo0505的回复: 这样的话别打开lo

sql server中一句实现自动备份数据库脚本

由于sqlserver很智能化了我们只需要一句就可以实现sql server自动备份数据库了.  代码如下 复制代码 BACKUP DATABASE [SiteWeaver] TO DISK = N'E:workbackupdatabaseSiteWeaver.bak' WITH NOFORMAT, INIT, NAME = N'SiteWeaver-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO

VC++:选择组合框中的条件实现对access数据库文件的自动查询并显示到编辑框中

问题描述 VC++:选择组合框中的条件实现对access数据库文件的自动查询并显示到编辑框中 请教下大家:如标题 当鼠标选择组合框下拉列表中的条件时,自动根据下拉框条件查询ACCES数据库中的数据,并将查询的结果显示到编辑框中去,谢谢! 解决方案 http://blog.csdn.net/wenluderen/article/details/39029649 解决方案二: http://blog.csdn.net/yunqi415/article/details/6963720

vb.net连接sql数据库查询表格名显示到 DataGridView中,如何点击选择一个表名查询整个表的内容

问题描述 我的代码如下,怎么解决这个问题啊,想了很久.button1是查询表名,button2是查询选中的表内容PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimstrConnectionAsString="Server=DELL-PCSQLEXPRESS;database=renshi;uid=ouqing;pwd=123;"Dimsql

VC++通过选择组合框条件自动查询数据库,并将查询结果显示到编辑框

问题描述 VC++通过选择组合框条件自动查询数据库,并将查询结果显示到编辑框 问题如标题,目前编写代码如下,但选择组合框条件后没反应 代码如下,诚盼大家指教,我是编程爱好者,为自己做需,谢谢!: CShiYinShaSet rs; UpdateData(); CString strSQL; //ShiYinSha:数据库中表名: //PiCi:表中列名: //Si_Pi:组合框ID变量,CString Si_Pi strSQL.Format("select * from ShiYinSha wh

数据库表中的nvarchar字段自动增加一些内容

问题描述 数据库表中的nvarchar字段自动增加一些内容 我的sqlserver2008r数据库表的有些navarchar数据自动增加一些内容 <style>.a29m{position:absolute;clip:rect(437px,auto,auto,480px);}</style><div class=a29m><a href=http://buyviag ,急解决,谢谢 解决方案 目测你网站挨别人黑了,加了黑链..检查漏洞吧 解决方案二: 数据怎么会自

java采集网页信息,并获取到所需要的信息存入数据库中对应的字段中去 (可以自动创建表头)

问题描述 java采集网页信息,并获取到所需要的信息存入数据库中对应的字段中去 (可以自动创建表头) "java采集网页信息,并获取到所需要的信息存入数据库中对应的字段中去 "创建好数据库的情况下可以插入对应数据了,现在我想实现自动创建表头,请问如何实现?请各位大大支招^_^ 解决方案 用正则表达式http://www.cnblogs.com/longwu/archive/2011/12/24/2300110.html 解决方案二: 没有你想象中的这么智能,要采集什么网页信息,入到什么

表空间 数据文件-oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展

问题描述 oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展 CSDN移动问答oracle表空间中的数据文件自动扩展到32G后不再自动扩展,报ora-01653错误,我之后手动加了个数据文件,但是不久之后这个数据文件自动扩展到了32G又报错,请问这是什么原因,难道以后只能手动添加数据文件么????

QTP中weblist自动选择的方法推荐

这里先来推荐一个在QTP中实现weblist自动化选择的一种方法,推荐的理由是网上的方法很多不可行,或是太过于复杂.其实事情往往很简单,只是思考他的人总是会认为它很复杂,所以才有了那么多复杂的事. 废话不多说,来讲原理: 由于本台本本上没有具体的代码,所以只有用记忆外加口头来描述如何进行weblist自动化的选择 一般我们录制一个weblist的选择,大体会是下面这样: browser(一个页面).page(一个页面).frame(一个框架).weblist(一个下拉选择表).select 具体