Odoo8中通过域名来自动选择数据库
来源:互联网 发布:央视直播软件apk 编辑:程序博客网 时间:2024/05/10 09:42
转载并助顶
http://blog.csdn.net/vnsoft/article/details/50827147
安装了一个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玩耍了。
另外还可以参考:http://blog.csdn.net/shanzhizi/article/details/47333703
0 0
- Odoo8中通过域名来自动选择数据库
- Odoo8中通过域名来自动选择数据库
- odoo8 or openerp 通过xml id获取数据库id
- c# 通过存储过程来自动创建主码
- 通过Push信息来自动启动JAVA移动应用程序
- 通过Push信息来自动启动JAVA移动应用程序
- 编写Shell程序,通过编写完成compress1、decompress1函数,选择“压缩”或“解压”以及输入文件名,来自动完成文件的压缩、解压过程。
- 通过机器学习来自动调优数据库
- Hibernate中使用SchemaExport来自动生成数据库中的表时,控制台有sql语句,但是数据库中无新建的表
- 在Eclipse中使用Ant来自动编译J2me程序
- 在Android Studio中利用gradle来自动编译jni
- 通过域名方式决定使用哪个数据库
- Viz Trio 脚本(Script) 续篇-如何通过导入txt来自动生成串联单
- 通过程序调用tomcat的manager的text模式的命令来自动部署项目
- 通过JPA来自动创建Model类与数据中表对应
- VC中通过域名获取IP
- 焦虑来自不行动,迷茫来自不作为
- Odoo8.0中使用文泉译中文字体
- MyBatis的#和$的区别
- Linux CPU篇
- iOS集成银联
- http Connect
- 术语常识
- Odoo8中通过域名来自动选择数据库
- android学习- json解析
- kernel printk|pr_info 调试基本原则
- neutron的基本原理
- 移动平均法详解
- mac增加path
- 自定义裁剪框
- AnimatorSet库
- C#中子类对父类中虚方法的处理有重写(override)和覆盖(new),他们有什么区别?