后端的Odoo 11空白页

标签 odoo odoo-11

问题

在 Odoo 后端,有时,窗口只会显示菜单项,屏幕的其余部分保持空白。
单击此菜单中的任何一个都会将 url 更改为 https://my_server_ip/web?debug#menu_id=68&action=
唯一会改变的是 menu_id 的值,但 action 的值将保持为空。

起初它以为是在刷新我已经打开的页面时。但是我无法始终如一地重现该错误(一旦发生它每次都会重现,但是如果我清除缓存/cookies,这在短时间内解决了问题,问题会在某个时候重现,但我找不到在我想要的时候重现它的行为。它只会在某个随机点发生)。它只是在一段时间后发生,有时是使用一个小时后,有时是两个页面加载后。有时,一天没问题,但明天第一次尝试时,错误再次发生。

尝试过的解决方案

以下是尝试过的相关解决方案:

  • 清除缓存和 cookie。
  • 重启服务器
  • 删除所有包含 ir_attachmentweb/content 条目。 (如 Odoo git 问题上的建议)。
  • 从头开始​​创建一个新的虚拟机,与被窃听的 Odoo 虚拟机无关,在这个新虚拟机上安装 Postgres 和 Odoo。然后继续重新安装所有已安装的模块。

  • 上述解决方案的影响

    同样的顺序:
  • 问题已解决,但过一段时间又出现了。
  • 通常本身不起作用,但有时会起作用。
  • 我认为它在执行此操作并重新启动服务器后有效,但现在无法重现该错误以再次对其进行测试。当错误再次出现时,我会尝试编辑以确认这项工作。
  • 机器行为相同。起初它起作用了,但过了一会儿,这个错误又开始了。

  • 配置
  • Odoo 版本:Odoo 11.0-20190108(社区版)
  • 操作系统:Debian 拉伸(stretch)
  • 社区模块安装:
  • backend_theme_v11
  • base_location
  • base_location_geonames_import
  • 发送短信
  • web_responsive
  • 还安装了为此任务内部开发的自定义模块。
  • VM 安装在 Proxmox 上
  • Nginx 服务

  • odoo.conf 的内容
    ; This is the password that allows database operations:
    ; admin_passwd = [admin_password]
    db_host = False
    db_port = False
    db_user = odoo
    db_password = [db_password]
    addons_path = /usr/lib/python3/dist-packages/odoo/addons,/opt/odoo/modules
    
    limit_memory_hard = 1677721600
    limit_memory_soft = 629145600
    limit_request = 8192
    limit_time_cpu = 600
    limit_time_real = 1200
    max_cron_threads = 1
    workers = 5
    
    # HTTP CONFIG
    proxy_mode = True
    
    xmlrpc = True
    xmlrpc_interface = 127.0.0.1
    netrpc_interface = 127.0.0.1
    

    Https 部署和长轮询部署

    This documentation 被用来做 Https 和 longpolling 部署

    日志

    发生bug时Odoo上产生的日志

    2019-01-10 09:56:01,883 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:01] "GET /web HTTP/1.0" 200 -
    2019-01-10 09:56:02,262 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/98/web_icon_data HTTP/1.0" 304 -
    2019-01-10 09:56:02,294 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/103/web_icon_data HTTP/1.0" 304 -
    2019-01-10 09:56:02,327 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/155/web_icon_data HTTP/1.0" 304 -
    2019-01-10 09:56:02,360 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/68/web_icon_data HTTP/1.0" 304 -
    2019-01-10 09:56:02,465 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/109/web_icon_data HTTP/1.0" 304 -
    2019-01-10 09:56:02,523 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/133/web_icon_data HTTP/1.0" 304 -
    2019-01-10 09:56:02,545 17075 INFO Developpement odoo.modules.registry: Invalidating all model caches after database signaling.
    2019-01-10 09:56:02,559 17075 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/142/web_icon_data HTTP/1.0" 304 -
    2019-01-10 09:56:02,595 17075 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/140/web_icon_data HTTP/1.0" 304 -
    2019-01-10 09:56:02,616 17073 INFO Developpement odoo.modules.registry: Invalidating all model caches after database signaling.
    2019-01-10 09:56:02,631 17073 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/144/web_icon_data HTTP/1.0" 304 -
    2019-01-10 09:56:02,653 17077 INFO Developpement odoo.modules.registry: Invalidating all model caches after database signaling.
    2019-01-10 09:56:02,668 17077 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/129/web_icon_data HTTP/1.0" 200 -
    2019-01-10 09:56:02,693 17074 INFO Developpement odoo.modules.registry: Invalidating all model caches after database signaling.
    2019-01-10 09:56:02,710 17075 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/webclient/qweb?mods=web,base,bus,web_tour,mail,sales_team,calendar,web_planner,contacts,crm,note,custom_module1,auth_signup,web_responsive,backend_theme_v11,base_import,base_location,base_location_geonames_import,iap,send_sms,sms,web_diagram,web_editor,web_kanban_gauge,web_settings_dashboard,portal HTTP/1.0" 304 -
    2019-01-10 09:56:02,713 17074 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/5/web_icon_data HTTP/1.0" 304 -
    2019-01-10 09:56:02,715 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "POST /web/dataset/call_kw/res.users/read HTTP/1.0" 200 -
    2019-01-10 09:56:02,747 17077 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /web/image/ir.ui.menu/4/web_icon_data HTTP/1.0" 200 -
    2019-01-10 09:56:02,762 17073 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "POST /web/dataset/call HTTP/1.0" 200 -
    2019-01-10 09:56:02,767 17077 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:02] "GET /dashboard HTTP/1.0" 200 -
    2019-01-10 09:56:03,059 17077 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "POST /web/webclient/translations HTTP/1.0" 200 -
    2019-01-10 09:56:03,115 17077 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "GET /web/webclient/locale/fr_FR HTTP/1.0" 200 -
    2019-01-10 09:56:03,218 17077 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "POST /mail/client_action HTTP/1.0" 200 -
    2019-01-10 09:56:03,253 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "POST /web/dataset/call_kw/res.users/read HTTP/1.0" 200 -
    2019-01-10 09:56:03,265 17078 INFO Developpement odoo.modules.registry: Invalidating all model caches after database signaling.
    2019-01-10 09:56:03,279 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "POST /calendar/notify HTTP/1.0" 200 -
    2019-01-10 09:56:03,302 17073 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "GET /web/image?model=res.users&field=image_small&id=1 HTTP/1.0" 304 -
    2019-01-10 09:56:03,316 17077 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "POST /web/action/load HTTP/1.0" 200 -
    2019-01-10 09:56:03,391 17075 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "POST /web/dataset/call_kw/web.planner/search_read HTTP/1.0" 200 -
    2019-01-10 09:56:03,409 17074 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "POST /web/dataset/call_kw/res.users/activity_user_count HTTP/1.0" 200 -
    2019-01-10 09:56:03,439 17076 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "POST /web/dataset/call_kw/mail.message/load_views HTTP/1.0" 200 -
    2019-01-10 09:56:03,519 17074 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "POST /web/dataset/call_kw/ir.filters/get_filters HTTP/1.0" 200 -
    2019-01-10 09:56:03,575 17074 INFO Developpement werkzeug: 127.0.0.1 - - [10/Jan/2019 09:56:03] "POST /web/dataset/call_kw/mail.message/message_fetch HTTP/1.0" 200 -



    *nginx服务产生的日志,不知道是否与bug 有关

    2019/01/10 11:52:37 [error] 165#165: *10008 upstream prematurely closed connection while reading response header from upstream, client: 82.127.91.106, server: [server_url], request: "POST /longpolling/poll HTTP/1.1", upstream: "http://127.0.0.1:8072/longpolling/poll", host: "[server_url]", referrer: "https://[server_url]/web?debug"



    注释:
  • 这一行只包含了我的四个自定义模块之一,不知道是否正常。

    [10/Jan/2019 09:56:02] "GET /web/webclient/qweb?mods=web,base,bus,web_tour,mail,sales_team,calendar,web_planner,contacts,crm,note,custom_module1,auth_signup,web_responsive,backend_theme_v11,base_import,base_location,base_location_geonames_import,iap,send_sms,sms,web_diagram,web_editor,web_kanban_gauge,web_settings_dashboard,portal HTTP/1.0" 304 -

  • 还要注意 304 错误。我在 Debian 环境中安装的 Odoo 上找不到任何解释。

  • 相关的附加错误

    在这个问题之上,这些问题也可能发生在同一台服务器上
  • 菜单项图片未加载(比空白页更常发生)
  • 登录页面上的重定向不是自动的,“你应该在几秒钟内被重定向,如果没有点击这里.../web/login”。曾经是系统的,但现在似乎不再发生了。

  • 解决方案不适用于这种情况

    如果您在研究后发现此问题,这可能对您有所帮助,但不适用于此问题的规范

    在 Windows 安装中,存在一个模块来解决这个问题: web_fix_blank_page
    这仅在编写此问题时适用于 V10,并且仅修复 Odoo 的操作系统相关问题,导致空白页错误。

    最后一句话

    由于 4 个尝试过的解决方案不起作用,并且我尝试了两个版本的近乎构建的 odoo,3 个月后,我预计问题出在我的自定义模块上。但它是成千上万的 LOC。
    什么可能导致这种情况,以及如何在所有这些文件中找到原因。
    可能是别的东西吗?会是什么呢?
    我无法一一卸载我的模块来尝试查找错误是在哪个模块中,至少不是全部。有两个原因:
  • 有些模块依赖于其他模块,所以我不能在没有父模块的情况下尝试子模块。
  • 该错误不可随意重现,它只会在某个时候发生,我无法确定该错误是否存在于我有信心卸载的模块中。

  • 编辑:新信息

    似乎只有在向自定义 Controller (和/web/session/authenticate)发出请求时才会出现该错误。
  • 如果在请求之后,我尝试刷新导航器中的页面,则会发生所描述的错误。并且通过清除缓存来修复错误。清除缓存后,刷新仍然会产生错误。一旦我重新启动服务器并清理缓存,就不会出现问题。
  • 如果我发出请求,重启服务器然后刷新,没有错误,没有清理缓存。
  • 最佳答案

    我找到了导致这种情况的原因。 5 个月了,仍然没有答案,所以我会在这里发布我的答案。

    如果您的 Controller 中有自定义路由,这个答案可能会对您有所帮助。

    首先,解决方案

    你永远不应该重新定义 Response 的任何属性直接对象。
    这意味着诸如 Response.status = '400 Invalid credentials' 之类的行每次调用您拥有它的路线时都会导致此错误发生。

    更深入地了解这个错误:

    当您这样做时Response.status = '400 Bad request'您重新获得对 Response 对象的控制权,并中断了 odoo 的正常工作流程。因此,它不再能够正确使用它,并且任何 odoo 路由返回的每个 Response 都将具有定义的最后状态,直到您重新启动服务器(在此示例中为 400,因此每个请求都被视为 BadRequest,导致空白页和其他各种错误,但 200 会做同样的事情,因为 302 是重定向所必需的)。

    如果有人知道为什么 Odoo 没有重新获得对 Response 对象的控制权,请随时编辑此答案(请这样做,这困扰了我很长时间)。

    那么如何修改响应状态呢? :

    快速浏览核心模块会给我们答案

    自定义 HTTP 方法的案例(如 POST):
    raise werkzeug.exception.BadRequest("400 Invalid credentials")
    请注意,默认情况下您不能引发除 400 之外的任何其他错误。如果你想这样做,你必须修改odoo根目录中的http.py文件。但是请注意,这可能意味着您不了解 HTTP 协议(protocol) ,就像我一样。事实上,大多数时候你应该返回 200,没有 HTTP 错误,所以请求是成功的。但是你应该添加一个 error如果行为不是客户端所期望的(例如连接时密码错误),则返回 json 的属性。

    标准方法 AFAIK 的情况(如 GET):

    response = werkzeug.wrappers.Response(json.dumps({<i>[your json dictionary]</i>}), status="400 Invalid credentials")
    return response
    

    关于后端的Odoo 11空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54129734/

    相关文章:

    odoo - Odoo 11 中的自定义过滤器

    odoo - 如何将值传递给将在模板上访问的 qweb 报告的上下文

    xpath - 如何在 <label for ="street"string ="Address"/> 之前 xpath 字段

    python - 如何继承第三方模块的 Controller 来定制 Odoo 12?

    odoo - 如何在 TreeView 上默认隐藏或删除复选框列?

    odoo-11 - 如何向应用程序菜单上的模块添加图标?

    python - OpenERP/Odoo - 字符串内的引号不起作用 - cr.execute(SQL)

    sorting - 如何更改 One2many 字段的顺序?

    python - 如何在 odoo-11 中卸载模块时同时删除数据库表?

    python - 导入错误 : No module named 'psutil'