后端的Odoo 11空白页

时间:2019-01-10 13:26:28

标签: odoo odoo-11

问题

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

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

尝试过的解决方案

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

  1. 清除缓存和cookie。
  2. 重新启动服务器
  3. 删除包含ir_attachment的{​​{1}}的所有条目。 (如有关Odoo git问题的建议)。
  4. 从头开始创建新的VM(与错误的Odoo VM无关),请在此新VM上安装Postgres和Odoo。然后继续重新安装所有已安装的模块。

上述解决方案的影响

以相同的顺序:

  1. 问题已解决,但过一会又发生。
  2. 通常不能单独使用,但有时可以。
  3. 我认为在执行此操作并重新启动服务器后即可正常工作,但现在无法重现该错误以再次对其进行测试。当错误再次出现时,我将尝试进行编辑以确认这项工作。
  4. 机器行为是相同的。最初它可以正常工作,但过了一会儿,该错误再次开始。

配置

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

odoo.conf的内容

web/content

Https部署和longpolling部署

This documentation被用来进行Https和longpolling部署

日志

错误发生时在Odoo上生成的日志

  

2019-01-10 09:56:01,883 17076 INFO开发werkzeug:127.0.0.1--[2019年1月10日09:56:01]“ GET / web HTTP / 1.0” 200-
2019 -01-10 09:56:02,262 17076 INFO开发werkzeug:127.0.0.1--[2019年1月10日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开发Werkzeug:127.0.0.1--[2019年1月10日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开发Werkzeug:127.0.0.1--[2019年1月10日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开发werkzeug:127.0.0.1--[2019年1月10日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开发werkzeug:127.0.0.1--[2019年1月10日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开发werkzeug:127.0.0.1--[2019年1月10日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信息Developpement odoo.modules.registry:数据库发出信号后使所有模型缓存无效。
  2019-01-10 09:56:02,559 17075 INFO开发werkzeug:127.0.0.1--[2019年1月10日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开发Werkzeug:127.0.0.1--[2019年1月10日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信息开发odoo.modules.registry:在数据库发出信号后使所有模型缓存无效。
  2019-01-10 09:56:02,631 17073 INFO开发Werkzeug:127.0.0.1--[2019年1月10日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信息开发odoo.modules.registry:在数据库发出信号后使所有模型缓存无效。
  2019-01-10 09:56:02,668 17077 INFO开发Werkzeug:127.0.0.1--[2019年1月10日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信息Developpement odoo.modules.registry:数据库发出信号后使所有模型缓存无效。
  2019-01-10 09:56:02,710 17075 INFO开发Werkzeug:127.0.0.1--[2019年1月10日09:56:02]“ GET / web / webclient / qweb?mods = web,base,bus,web_tour ,邮件,销售团队,日历,web_planner,联系人,crm,注释,custom_module1,auth_signup,web_response,backend_theme_v11,base_import,base_location,base_location_geonames_import,IAP,send_sms,sms,web_diagram,web_editor,web_kanbans_gauge,
  2019-01-10 09:56:02,713 17074 INFO开发Werkzeug:127.0.0.1--[2019年1月10日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开发Werkzeug:127.0.0.1--[2019年1月10日09:56:02]“ POST /web/dataset/call_kw/res.users/read HTTP / 1.0” 200-
  2019-01-10 09:56:02,747 17077 INFO开发Werkzeug:127.0.0.1--[2019年1月10日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开发werkzeug:127.0.0.1--[2019年1月10日09:56:02]“ POST / web / dataset / call HTTP / 1.0” 200-
  2019-01-10 09:56:02,767 17077 INFO开发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开发Werkzeug:127.0.0.1--[2019年1月10日09:56:03]“ POST / web / webclient / translations HTTP / 1.0” 200-
  2019-01-10 09:56:03,115 17077 INFO开发Werkzeug:127.0.0.1--[2019年1月10日09:56:03]“ GET / web / webclient / locale / fr_FR HTTP / 1.0” 200-
  2019-01-10 09:56:03,218 17077 INFO开发Werkzeug:127.0.0.1--[2019年1月10日09:56:03]“ POST / mail / client_action HTTP / 1.0” 200-
  2019-01-10 09:56:03,253 17076 INFO开发werkzeug:127.0.0.1--[2019年1月10日09:56:03]“ POST /web/dataset/call_kw/res.users/read HTTP / 1.0” 200-
  2019-01-10 09:56:03,265 17078信息Developpement odoo.modules.registry:数据库发出信号后使所有模型缓存无效。
  2019-01-10 09:56:03,279 17076 INFO开发werkzeug:127.0.0.1--[2019年1月10日09:56:03]“ POST / calendar / notify HTTP / 1.0” 200-
  2019-01-10 09:56:03,302 17073 INFO开发Werkzeug:127.0.0.1--[2019年1月10日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开发werkzeug:127.0.0.1--[2019年1月10日09:56:03]“ POST / web / action / load HTTP / 1.0” 200-
  2019-01-10 09:56:03,391 17075 INFO开发werkzeug:127.0.0.1--[2019年1月10日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开发Werkzeug:127.0.0.1--[2019年1月10日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开发Werkzeug:127.0.0.1--[2019年1月10日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开发Werkzeug:127.0.0.1--[2019年1月10日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开发Werkzeug:127.0.0.1--[2019年1月10日09:56:03]“ POST /web/dataset/call_kw/mail.message/message_fetch HTTP / 1.0” 200-

*在nginx服务上生成的日志,我们不知道该日志是否与错误有关

  

2019/01/10 11:52:37 [错误] 165#165:* 10008上游过早关闭连接,同时从上游读取响应标头,客户端:82.127.91.106,服务器:[server_url],请求:“ POST / longpolling / poll HTTP / 1.1“,上游:” http://127.0.0.1:8072/longpolling/poll“,主机:” [server_url]“,引荐来源网址:” https://[server_url]/web?debug

注释:

  • 此行仅包含我的四个自定义模块之一,我不知道这是否正常。

      

    [2019年1月10日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_active,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,门户网站HTTP / 1.0“ 304-

  • 还请注意; 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 错误。我在Debian环境中安装的Odoo上找不到任何解释。

其他相关错误

最重要的是,那些问题也可能发生在同一服务器上

  • 菜单项图片未加载(出现的频率比空白页面高
  • 登录页面上的重定向不是自动进行的,“如果没有单击此处,您应该在几秒钟内被重定向... / web / login”。过去是系统的,但现在似乎不再发生了。

不适用于此情况的解决方案

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

在Windows安装中,存在一个模块来解决此问题:web_fix_blank_page
仅在撰写此问题时才针对V10存在,并且仅针对Odoo解决了与操作系统相关的问题,从而导致空白页错误。

最终词

由于4种尝试的解决方案均无效,并且我尝试了两个版本的近距离构建的odoo,需要3个月的时间,所以我希望问题出在我的自定义模块上。却是成千上万的LOC。
是什么引起的,如何在所有这些文件中找到原因。 可能还有其他吗?会是什么?
我无法一一卸载模块来尝试找出错误所在的模块,至少不是全部。有两个原因:

  • 某些模块依赖于其他模块,因此我不能在没有父模块的情况下尝试使用子模块。
  • 该错误是不可复制的,它只会在某个时候发生,我不能确定该错误是否存在,或者是否不在我有信心卸载的模块中。

编辑:新信息

似乎该错误仅在向自定义控制器(和/ web / session / authenticate)发出请求时才会发生。

  • 如果在请求之后,我尝试刷新导航器中的页面,则会发生所描述的错误。通过清除缓存可以修复错误。清除缓存后,刷新仍然会产生错误。重新启动服务器并清理缓存后,就不会出现问题。
  • 如果我发出请求,请重新启动服务器,然后刷新,没有错误,而不会清除缓存。

1 个答案:

答案 0 :(得分:1)

我发现了造成这种情况的原因。 5个月了,仍然没有答案,所以我将在这里发布答案。

如果您的控制器中有自定义路由,此答案可能会为您提供帮助。

首先,解决方案

永远不要以直接的方式重新定义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协议。实际上,大多数情况下您应该返回200,没有HTTP错误,因此请求成功。但是,如果行为不是客户端期望的行为(例如连接时输入错误的密码),则应在返回的json中添加error属性。

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

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