标签: odoo13

  • Odoo错误修复 Exception: bus.Bus unavailable Finally fixed by ITGeeker

    Odoo错误修复 Exception: bus.Bus unavailable Finally fixed by ITGeeker

    相信Odoo的错误Exception: bus.Bus unavailable困扰了全球太多的Odoo的开发者,因为网上一搜提问者甚多,解决方案看上去也是一堆,似乎最终失望者还是比比皆是。ITGeeker技术奇客尝试了各种办法,最终解决了这一问题,分享过程给大家,希望能帮到一些Odoo开发者节约一点时间吧

    Exception: bus.Bus unavailable错误日志样例:

    2023-06-06 02:45:38,198 1388075 ERROR itgeeker odoo.http: Exception during JSON request handling. 
    Traceback (most recent call last):
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 624, in _handle_exception
        return super(JsonRequest, self)._handle_exception(exception)
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 310, in _handle_exception
        raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
      File "/opt/odoo13/odoo13_source/odoo/tools/pycompat.py", line 14, in reraise
        raise value
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 669, in dispatch
        result = self._call_function(**self.params)
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 350, in _call_function
        return checked_call(self.db, *args, **kwargs)
      File "/opt/odoo13/odoo13_source/odoo/service/model.py", line 94, in wrapper
        return f(dbname, *args, **kwargs)
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 339, in checked_call
        result = self.endpoint(*a, **kw)
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 915, in __call__
        return self.method(*args, **kw)
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 515, in response_wrap
        response = f(*args, **kw)
      File "/opt/odoo13/odoo13_source/addons/bus/controllers/main.py", line 35, in poll
        raise Exception("bus.Bus unavailable")
    Exception: bus.Bus unavailable

    错误分析

    基本都认为是longpolling配置不正确引起的,涉及到的配置文件主要有两个:

    • 一个是Nginx或者Apache的配置文件,ITGeeker技术奇客用的是Nginx,所以这里以Nginx为例
    • 另一个是Odoo的配置文件

    影响的Odoo版本:

    Odoo 8 | Odoo 9 | Odoo 10 | Odoo 11 | Odoo 12 | Odoo 13 | Odoo 14 | Odoo 15

    Odoo 16应该不会有这个问题了,因为采用了gevent_port,直接不再使用longpolling_port端口了

    网上收集的解决方案:

    Nginx配置文件:

    无非就是要在路径的上加上proxy_redirect off;和定义一些header,然并卵,愿意尝试的可以按照下面的代码试试看

    location / {
            proxy_pass  http://backend_o13_itgeeker;
            # force timeouts if the backend dies
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            proxy_redirect off;
            # set headers
            proxy_set_header    Host            $host;
            proxy_set_header    X-Real-IP       $remote_addr;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto https;
        }    
    
    location /longpolling/ {
            proxy_pass  http://backend_o13_itgeeker_chat;
            # force timeouts if the backend dies
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            proxy_redirect off;
            # set headers
            proxy_set_header    Host            $host;
            proxy_set_header    X-Real-IP       $remote_addr;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto https;
        }
    Odoo配置文件:

    要确认三个配置项,workers一定要大于等于2, 如果前端使用了Nginx或者apache,proxy_mode这里应该是True:

    • proxy_mode = True
    • longpolling_port = 8372
    • workers = 3
    ODOO依赖安装

    关键检查是否已安装python以下两个模块,可以用pip list | grep module_name来检查

    • pip install gevent
    • pip install psycogreen

    据说没安装psycogreen的人还挺多,记得一定要安装上。

    这三个方面的配置,最终的目的就是检查longpolling_port是否已正常启动?

    by itgeeker.net
    netstat -ntpl | grep 8372
    tcp        0      0 0.0.0.0:8372            0.0.0.0:*               LISTEN      1439095/python3     
    很遗憾,ITGeeker技术奇客这些都正常,longpolling_port端口也正常,但是Exception: bus.Bus unavailable还是不断的出现,真是百思不得其解。在午饭前,忽然想到,要不改一下Nginx的proxy名称,也就是这两个上游端口的名称:
    # Odoo backend ##
    upstream backend_o13_itgeeker {
        server 127.0.0.1:8369 weight=1 fail_timeout=3000s;
    }
    upstream backend_o13_itgeeker_chat {
        server 127.0.0.1:8372 weight=1 fail_timeout=3000s;
    }
    然后优雅的重启nginx服务nginx -s reload就去吃饭了,回来后意外发现,问题真的解决了,log不再出现Exception: bus.Bus unavailable了。希望能帮到被Odoo的这个问题困扰的你。
  • Odoo15大大简约了引入JS和CSS文件方法

    Odoo15大大简约了引入JS和CSS文件方法

    例如odoo13当中,我们要引入自己的CSS文件,需要创建一个 geekermaster_asset.xml文件,加入类似以下代码:

    <?xml version="1.0" encoding="utf-8"?>
    <odoo>
        <data>
            <!-- talent css -->
            <template id="assets_backend" name="geekermaster_assets" inherit_id="web.assets_backend">
                <xpath expr="." position="inside">
                  <link type="text/css" href="/geekermaster_addons/static/src/css/style.css" rel="stylesheet"/>
                </xpath>
            </template>
        </data>
    </odoo>
    

    然后在manifest.py文件的data中引入该xml文件:

        'data': [
            'views/geekermaster_asset.xml',
    ],

    如今odoo15已经不支持这种引入方式,如果还采用这种方式,安装的时候会报错。

    Odoo15引入CSS的正确姿势

    只要在 manifest.py文件添加以下代码即可,是不是方便了不少:

        'assets': {
            'web.assets_backend': [
                'geekermaster_addons/static/src/css/style.css',
            ],
            'web.assets_qweb': [
            ],
        },

奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4