分类: Odoo

  • Google Chrome清除指定网站的所有缓存 浏览记录、Cookie、缓存及其他数据

    Google Chrome清除指定网站的所有缓存 浏览记录、Cookie、缓存及其他数据

    当您使用浏览器(例如 Chrome或者Edge)时,浏览器会将网站中的一些信息保存在其缓存和 Cookie 中。有时候清除这些内容可以解决某些问题,例如更新了Odoo的JS文件后,客户端浏览器并不会马上更新。

    先来看看Google谷歌官方指导

    在 Chrome 中

    1. 在计算机上打开 Chrome。
    2. 点击右上角的“更多”图标 展开
    3. 依次点击更多工具 接着点按 清除浏览数据
    4. 在顶部,选择一个时间范围。要删除所有内容,请选择时间不限
    5. 选中“Cookie 及其他网站数据”及“缓存的图片和文件”旁边的复选框。
    6. 点击清除数据

    谷歌官方的这一指引并不能清除指定的单一网站缓存,而是只有清除所有网站的缓存。比如如果你想单单清除https://www.itgeeker.net的缓存和Cookie是无法实现的。

    不清除缓存,只单独清除某个网站的Cookie是可以的。

    by itgeeker.net

    清除特定网站缓存的方法

    但是,如果采用开发者工具(浏览器页面F12可开启),则可以很快消除该页面的缓存,从而实现消除并更新的效果

    打开开发者工具(F12),选择 Network——Disable cache,刷新页面,如果已经清除并更新,可以去掉Disable cache选项,再刷新页面试试。

    这样就实现了清除特定网站缓存,而不必清除所有网站的缓存了。

    好像换了默认快捷键了:Ctrl + Shift + I

    清除特定网站缓存的方法2025

    在Chrome浏览器中,你可以通过开发者工具删除指定网址的缓存。具体步骤如下:

    1. 打开开发者工具:
      在要清除缓存的网页上,按F12 或右键点击页面,选择“检查”。
    2. 选择“Application”选项卡:
      在开发者工具的左侧面板中,点击“Application” 选项卡。
    3. 选择“Storage”部分:
      在Application 选项卡中,找到“Storage”(存储)部分。
    4. 清除存储数据:
      在“Storage”部分,你可以找到与该网址相关的缓存、Cookie、Service Workers等。选择要清除的项目(例如,缓存)并点击“Clear site data”按钮。
      这种方法可以清除特定网址的缓存,而不会影响其他网页的缓存.

      另外,还可以通过以下方法清除缓存:
    5. 清除浏览数据:
      在Chrome浏览器中,可以点击右上角的“更多”图标,选择“更多工具”,然后点击“清除浏览数据”。选择要清除的时间范围和类型,然后点击“清除数据”。
    6. 使用开发者工具禁用缓存:
      在开发者工具的Network 选项卡中,可以勾选“Disable cache” 选项,这样在浏览网页时,Chrome就不会从缓存中读取数据,从而实现清除缓存的效果.

      注意事项:
    • 清除缓存后,网页可能需要重新加载以获取最新数据,因此网页加载时间可能会略有增加。
    • 在清除缓存之前,可以考虑备份或记录重要的网站数据,以免丢失数据。

  • Odoo @onchange方法使用write引起的错误 odoo.http: 数据库读入不到 ids ((,)) 与extra ids ((268,)),可能是因为上个请求的类型不一致所造成的

    Odoo @onchange方法使用write引起的错误 odoo.http: 数据库读入不到 ids ((,)) 与extra ids ((268,)),可能是因为上个请求的类型不一致所造成的

    Odoo 15版本今天碰到一个奇怪的错误提示:

    odoo.http: 数据库读入不到 ids ((<NewId origin=268>,)) 与extra ids ((268,)),可能是因为上个请求的类型不一致所造成的

    英文错误信息类似:

    Database fetch misses ids ((<NewId origin=268>,)) and has extra ids ((268,)), may be caused by a type incoherence in a previous request

    如果是新创建的对象文档,还会提示错误信息:

    odoo.http: 由于安全限制,您不得访问"客户"(geeker.client) 记录.
    记录: 新建客户 (id=NewId_0x7f4ace646a90)
    User: Administrator (id=2)
    
    此限制是由于以下规则: 
    如有必要,请联系您的管理员以请求访问. 

    Google了一圈也没找到解决方法,Odoo官方论坛也有人提问,但没有人回答,后来是我回答的😁

    https://www.odoo.com/zh_CN/forum/bang-zhu-1/database-fetch-misses-ids-newid-origin-1-and-has-extra-ids-1-may-be-caused-by-a-type-incoherence-in-a-previous-request-206269

    https://www.odoo.com/zh_CN/forum/bang-zhu-1/database-fetch-misses-ids-newid-origin-56101-and-has-extra-ids-56101-may-be-caused-by-a-type-incoherence-in-a-previous-request-221209

    后来在官方的issue当中看到了类似问题的解决方法:

    因为你在@api.onchange代码里使用了write()方法引起的,改为updat()问题就可以解决了。

    by itgeeker.net
  • 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': [
            ],
        },

  • Ubuntu/Debian/Raspbian 如何通过源码安装Odoo15 十步安装Odoo15

    Ubuntu/Debian/Raspbian 如何通过源码安装Odoo15 十步安装Odoo15

    Odoo15发布在即,相信将会给你带来更好的使用体验和性能。ITGeeker技术奇客和大家一起看一下如何在Ubuntu/Debian/Raspbian通过Odoo源码安装Odoo15

    Odoo5需要Python3.8支持,否则有些功能可能有所限制

    by itgeeker.net

    第一步:安装Python和依赖包

    sudo apt-get install python-dev python3-dev libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev libldap2-dev build-essential libssl-dev libffi-dev libjpeg8-dev libpq-dev liblcms2-dev libblas-dev libatlas-base-dev default-libmysqlclient-dev

    通过网上搜到的往往有两个坑:

    1. Package ‘libmysqlclient-dev’ has no installation candidate 使用default-libmysqlclient-dev来代替
    2. libjpeg8-dev和libjpeg-dev冲突,导致无法安装,选一个就好,ITGeeker技术奇客用的libjpeg8-dev包

    第二步:安装 PostgreSQL 数据库

    PostgreSQL用12或者13版本都没问题,有些自带11的问题也不大。

    sudo apt-get install postgresql

    创建数据库用户

    sudo su - postgres
    createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt odoo15

    让odoo15成为Postgresql的超级用户,否则启动的时候会有个错误提示,不知道是不是新版本的bug

    sudo -u postgres psql
    ALTER USER odoo15 WITH SUPERUSER;

    第三步:给系统添加一个Odoo15的用户用于运行

    sudo adduser --system --home=/opt/odoo15 --group odoo15

    第四步:通过git获取odoo15的源代码

    sudo su - odoo15 -s /bin/bash
    git clone https://www.github.com/odoo/odoo --depth 1 --branch 15.0 --single-branch .

    此处最后的 . 要保留,这里指的是你刚才创建用户的Home路径

    by itgeeker.net

    第五步:安装Python的工具包

    此处建议使用python venv环境来运行,这样你的系统如果要使用其它python包的时候不会有冲突,可保持系统稳定运行。

    by itgeeker.net
    sudo apt install python3-venv
    sudo su - odoo15 -s /bin/bash
    python3 -m venv /opt/odoo15/odoo15_env
    source /opt/odoo15/odoo15_env/bin/activate
    
    pip install wheel
    pip install --upgrade pip
    pip install setuptools --upgrade
    
    pip3 install -r /opt/odoo15/odoo15_source/requirements.txt

    如果安装速度太慢,那就采用镜像加速的方式来安装吧:

    国内PIP安装加速 临时和永久设置镜像的方法

    这里还需要安装npm及依赖包

    sudo apt-get install -y npm
    sudo npm install -g less less-plugin-clean-css
    sudo apt-get install -y node-less

    如果也有安装速度问题,请用镜像方式

    npm –registry https://registry.npm.taobao.org install -g less less-plugin-clean-css

    by itgeeker.net

    第六步:安装Wkhtmltopdf

    Odoo打印PDF报告都要用到这个模块,如果直接安装版本太低,就下载到本地安装。

    cd /tmp && sudo wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.deb
    sudo dpkg -i wkhtmltox_0.12.5-1.bionic_amd64.deb
    sudo apt install -f
    #直接安装
    sudo apt install wkhtmltopdf

    第七步:创建conf文件

    sudo cp /opt/odoo15/odoo15_source/debian/odoo.conf /etc/odoo15.conf
    sudo nano /etc/odoo15.conf

    添加配置内容

    [options]
       ; This is the password that allows database operations:
       admin_passwd = admin
       db_host = False
       db_port = False
       db_user = odoo15
       db_password = False
       addons_path = /opt/odoo15/odoo15_source/addons
       logfile = /var/log/odoo15/odoo15.log

    更改权限

    sudo chown odoo15: /etc/odoo15.conf
    sudo chmod 640 /etc/odoo15.conf

    创建一下刚配置的log文件和权限

    sudo mkdir /var/log/odoo15
    sudo chown odoo15:root /var/log/odoo15

    第八步:Odoo15服务文件

    sudo nano /etc/systemd/system/odoo15.service

    添加内容

    [Unit]
    Description=Odoo15
    Documentation=https://www.geekercloud.com
    [Service]
    # Ubuntu/Debian convention:
    Type=simple
    User=odoo15
    #ExecStart=/opt/odoo15/odoo15_source/odoo-bin -c /etc/odoo15.conf
    ExecStart=/opt/odoo15/odoo15_env/bin/python3 /opt/odoo15/odoo15_source/odoo-bin -c /etc/odoo15.conf
    [Install]
    WantedBy=default.target

    调整权限

    sudo chmod 755 /etc/systemd/system/odoo15.service && sudo chown root: /etc/systemd/system/odoo15.service
    

    第九步:运行及查看log

    sudo systemctl start odoo15.service
    sudo systemctl status odoo15.service
    sudo systemctl enable odoo15.service
    sudo systemctl restart odoo15.service

    用谷歌浏览器Chrome打开查看你的Odoo15系统:

    http://127.0.0.1:8069

    第十步:查看日志Log

    sudo tail -f /var/log/odoo15/odoo15.log

    如有任何问题,请联系

    奇客罗方智能科技

  • Odoo timezone时差调整 方法 时区调整

    Odoo timezone时差调整 方法 时区调整

    文章最后更新于2023-05-17

    by itgeeker.net

    最近在开发Odoo整合VOIP电话(供应商称为云电话)到奇客大师(GeekerMaster)系统时,返回的log说是时间戳错误。供应商说每次post的url的时效性是1分钟,检查发现后,我们每次发送Post请求的时候都会重新产生一遍,应该不存在时间过期的问题。

    用 _logger.warning打印变量值,发现Odoo服务器发送post的时间和我们当前Asia/Shanghai时区的时间是不同的,比当前电脑时间早了8个小时。而在系统端用date查询时间是正确的。应该是Odoo系统采用UTC时间的问题。

    Odoo系统前端页面显示是当前时区的时间,视图渲染时对datetime类型的字段做了时区调整,但后台数据库记录用的是UTC时间,并没有做时区调整,据说这是解决全球性使用一个系统的时间差问题的最好方法。

    这次ITGeeker技术奇客碰到的问题是国内的云电话供应商用的是北京时间UTC+8时区(Asia/Shanghai),所以只好调整代码来解决这个问题了。

    Odoo调整时差方法一 timedelta(hours=8)

    直接加8个小时,直观又方便。后面的时间格式根据要求可以更改。

    import datetime
    from datetime import timedelta
    
    now = (datetime.datetime.now() + timedelta(hours=8)).strftime("%Y%m%d%H%M%S")

    Odoo调整时差方法二 pytz

    import datetime
    import pytz
    
    user_tz = self.env.user.tz
    # local_tz = pytz.timezone(user_tz)
    now = datetime.datetime.now(pytz.timezone(
                user_tz)).strftime("%Y%m%d%H%M%S")

    Odoo要在”首选项”配置里设置好自己的时区为Asia/Shanghai,否则无法读取到您当前的时区。

    Odoo调整时差方法三 dpkg-reconfigure tzdata

    服务器端,例如Ubuntu使用 dpkg-reconfigure tzdata 设置时区,设置为UTC时区,使得您当前的时间和UTC时间一致。

    这里有个小提示: strftime和 strptime是不同的,一个是输出显示时间的样式,后者是输出时间的格式。

    ITGeeker技术奇客最近也调试了阿里云的短信,阿里用的时间格式就和时差无关,用的GMT时间。分享一下用python实现阿里短信所需要的时间格式:

    import time
    
    now = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())

    UTC确立以后UTC(GMT)=UTC(+0)作为一般提到的世界时,GMT表示零时区的时刻。 … 格林威治时间(GMT)是一个比较模糊的概念。 在1928年,GMT就是世界时。 在UTC被广泛采用后,我们提到的GMT实际上是UTC时间,或者说零时区的标准时。

    所以说用UTC是最好的解决方案。
奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

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