问题
在 Odoo 后端,有时,窗口只会显示菜单项,屏幕的其余部分保持空白。
单击此菜单中的任何一个都会将 url 更改为 https://my_server_ip/web?debug#menu_id=68&action=
唯一会改变的是 menu_id
的值,但 action
的值将保持为空。
起初它以为是在刷新我已经打开的页面时。但是我无法始终如一地重现该错误(一旦发生它每次都会重现,但是如果我清除缓存/cookies,这在短时间内解决了问题,问题会在某个时候重现,但我找不到在我想要的时候重现它的行为。它只会在某个随机点发生)。它只是在一段时间后发生,有时是使用一个小时后,有时是两个页面加载后。有时,一天没问题,但明天第一次尝试时,错误再次发生。
尝试过的解决方案
以下是尝试过的相关解决方案:
ir_attachment
的 web/content
条目。 (如 Odoo git 问题上的建议)。 上述解决方案的影响
同样的顺序:
配置
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 上找不到任何解释。 相关的附加错误
在这个问题之上,这些问题也可能发生在同一台服务器上
解决方案不适用于这种情况
如果您在研究后发现此问题,这可能对您有所帮助,但不适用于此问题的规范
在 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/