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

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

Vivado2023是一款集成开发环境软件,用于设计和验证FPGA(现场可编程门阵列)和可编程逻辑器件。对于使用Vivado2023的用户来说,license是必不可少的。 Vivado2023的license是一种许可证,用于授权用户合法使用该软件。许可证分为多种类型,包括评估许可证、开发许可证和节点许可证等。每种许可证都有不同的使用条件和功能。 评估许可证是免费提供的,让用户可以在一段时间内试用Vivado2023的全部功能。用户可以使用这个许可证来了解软件的性能和特点,对于初学者和小规模项目来说是一个很好的选择。但是,使用评估许可证的用户在使用期限过后需要购买正式的许可证才能继续使用软件。 开发许可证是付费的,可以永久使用Vivado2023的全部功能。这种许可证适用于需要长期使用Vivado2023进行开发的用户,通常是专业的FPGA设计师或工程师。购买开发许可证可以享受Vivado2023的技术支持和更新服务,确保软件始终保持最新的版本和功能。 节点许可证是用于多设备或分布式设计的许可证,可以在多个计算机上安装Vivado2023,并共享使用。节点许可证适用于大规模项目或需要多个处理节点进行设计的用户,可以提高工作效率和资源利用率。 总之,Vivado2023 license是用户在使用Vivado2023时必须考虑的问题。用户可以根据自己的需求选择合适的许可证类型,以便获取最佳的软件使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值