Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

[分享]openerp-server.conf 中配置 dbfilter 参数无效的解决办法



  • 以前就发现过这个问题, 今天重新在群里同大家讨论了一下. <br /><br />有时候可能我们希望用户不从登陆界面的账套选择处进入各个账套(因为如果未曾登陆过OE时, 默认会登陆第一个账套), 这时也容易造成错误. 所以, 一般的做法就是使用 openerp-server.conf 中的 dbfilter 参数进行限定.<br />而大部分做法就是 <br /><br />dbfilter = ^%d$          # 即取 OE WEB访问时取地址栏上 域名的第末子域.  <br /><br />即  http://db001.openerp.com  访问时, 会自动设置为 dbfilter = db001 <br /><br />在 openerp-server.conf 中 限制 db_list = False, dbfilter = ^%d$ 后. 发现并不生效<br /><br />从抓包 与 跟踪源码的结果 是<br />web 获取当前账套列表 /web/db_list 时, 还是取得了所有的账套列表.<br />从 /web/controller/main.py 的 db_list 跟踪得到 openerp.tools.config['dbfilter'] 并没有取到 openerp-server.conf 中的配置项值.而是使用了  /openerp/tools/config.py 文件中 <br /><br />[code]<br />        group.add_option("--db-filter", dest="dbfilter", default='.',<br />                        help="Filter listed database", metavar="REGEXP")<br />[/code]<br /><br />中的 default='.' 值<br /><br />这个 default='.' 将配置文件中的设置又盖掉了.<br />开发群中 上海-baggio(317016042) 给出问题所在. 在 /openerp/tools/config.py 文件中, 在 openerp-server.conf 中的生效项. 必须使用 my_default 参数.<br /><br />所以, 将上述行代码改成 <br /><br />[code]<br />        group.add_option("--db-filter", dest="dbfilter", my_default='.',<br />                        help="Filter listed database", metavar="REGEXP")<br />[/code]<br /><br />即可以 让 openerp-server.conf 文件中的 dbfilter 项生效.<br />其他的配置 文件项,同样的操作方式..<br /><br />感谢 上海-baggio(317016042)  的分享..<br />



  • 以前就发现过这个问题, 今天重新在群里同大家讨论了一下. <br /><br />有时候可能我们希望用户不从登陆界面的账套选择处进入各个账套(因为如果未曾登陆过OE时, 默认会登陆第一个账套), 这时也容易造成错误. 所以, 一般的做法就是使用 openerp-server.conf 中的 dbfilter 参数进行限定.<br />而大部分做法就是 <br /><br />dbfilter = ^%d$          # 即取 OE WEB访问时取地址栏上 域名的第末子域.  <br /><br />即  http://db001.openerp.com  访问时, 会自动设置为 dbfilter = db001 <br /><br />在 openerp-server.conf 中 限制 db_list = False, dbfilter = ^%d$ 后. 发现并不生效<br /><br />从抓包 与 跟踪源码的结果 是<br />web 获取当前账套列表 /web/db_list 时, 还是取得了所有的账套列表.<br />从 /web/controller/main.py 的 db_list 跟踪得到 openerp.tools.config['dbfilter'] 并没有取到 openerp-server.conf 中的配置项值.而是使用了  /openerp/tools/config.py 文件中 <br /><br />[code]<br />        group.add_option("--db-filter", dest="dbfilter", default='.',<br />                        help="Filter listed database", metavar="REGEXP")<br />[/code]<br /><br />中的 default='.' 值<br /><br />这个 default='.' 将配置文件中的设置又盖掉了.<br />开发群中 上海-baggio(317016042) 给出问题所在. 在 /openerp/tools/config.py 文件中, 在 openerp-server.conf 中的生效项. 必须使用 my_default 参数.<br /><br />所以, 将上述行代码改成 <br /><br />[code]<br />        group.add_option("--db-filter", dest="dbfilter", my_default='.',<br />                        help="Filter listed database", metavar="REGEXP")<br />[/code]<br /><br />即可以 让 openerp-server.conf 文件中的 dbfilter 项生效.<br />其他的配置 文件项,同样的操作方式..<br /><br />感谢 上海-baggio(317016042)  的分享..<br />



  • 恭喜,这是又抓到了一个 bug  ?



  • 如果用到 dbfilter 那么.... 这豆是一个BUG...<br /><br />如果没有用到. 那么 就忽略....



  • 南京-ccdos(1431494)  15:59:22<br />^%d$  是个正则吗 ?<br /><br />我怎么搜不到 %d  的含义呢<br /><br /><br />墨尔本-肉山(810333201)  15:59:46<br />就是正常的 %d 吧<br />重庆-mrshelly(49812643)  15:59:47<br />@南京-ccdos  /addons/web/controller/main.py <br /><br />db_list method<br />%d 非 python 的 %d<br />不是 %digit  而是 %domain<br />对应还有 %h<br />代表  %host



  • 测试了一下 , OK<br /><br />谢谢各位分享



  • 你那个还是针对配了二级子域名的情况,http://ip:port/web?db=openerp  针对这种情况无效的<br /><br /><br />我的做法是 针对这种情况,只能在 init.d 里自启动脚本里 添加  启动命令 附加  [size=13px][font=Verdana]--db-filter='oe8'[/font][/size]<br /><br />[font=verdana, arial, helvetica, sans-serif][size=2]这种情况在 openerp8.0下测试通过,客户可以直接访问对外的 pubulic  website 了[/size][/font]<br /><br /><br />



  • db_filter 本意就是使用二级域名来做数据库的自动选择. <br />如果在 init.d 中指定 db-filter 的话,  那一个 OE 实例就只能使用一个账套了.<br /><br />使用二级域名. 可以实现一个OE实例多个账套. 而使用者感觉不到有其他账套存在....



  • 谢谢总监大人,我明白了



  • oe8  website特性  要想给公众 public 访问,必须配好单数据库模式,看来只能从oe8代码角度破除这个限制了。



  • 推荐修改 db_list 或者(db_filter v8.0) 接口,实现顶域与帐套的匹配.<br /><br />[url=http://shine-it.net/index.php/topic,16199.msg27430.html]http://shine-it.net/index.php/topic,16199.msg27430.html[/url]<br />



  • def db_filter(dbs, httprequest=None):<br />    httprequest = httprequest or request.httprequest<br />    h = httprequest.environ.get('HTTP_HOST', '').split(':')[0]<br />    d, _, r = h.partition('.')<br />    if d == "www" and r:<br />        d = r.partition('.')[0]<br />    r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d)<br />    dbs = [i for i in dbs if re.match(r, i)]<br />    return dbs<br /><br />8.0 rc 改成上面这样了,看不懂



  • mark一下



  • 已更新 ODOO8的修改方法 ,参考http://shine-it.net/index.php?topic=16199.msg27338#msg27338


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待