为什么我得到“内部服务器错误”运行两个Odoo实例(相同的域但不同的端口)?

时间:2015-05-12 14:56:24

标签: cookies odoo-8 odoo internal-server-error odoo-server

我在云端的服务器中有两个Odoo实例。如果我执行以下步骤,则会出现“内部服务器错误”:

  1. 我在第一个实例(http://111.222.33.44:3333
  2. 中登录
  3. 我关闭了会话
  4. 我在同一浏览器(http://111.222.33.44:4444
  5. 中加载第二个实例的地址

    如果我想在第二个实例(在另一个端口)工作,我需要首先删除浏览器cookie以访问其他Odoo实例。如果这样做一切正常。

    如果我同时在不同的浏览器(Firefox和Chromium)中加载它们,它们也能正常运行。

    这不是NginX问题,因为我尝试使用和不使用它。

    有没有办法永久解决这个问题?这是预期的行为吗?

4 个答案:

答案 0 :(得分:0)

最后我认为这是预期的行为。所有网站的cookie都专门存储在Web浏览器中的每个网站(针对每个域)。因此,如果我只更改端口,则第一个实例的cookie与另一个实例的cookie冲突,因为它具有相同的域(在我的示例中为111.222.33.44)。

所以有一些解决方法:

本地更改域名

/etc/hosts中的笔记本电脑中创建几个域名:

111.222.33.44  cloud01
111.222.33.44  cloud02

然后饼干不再相互干扰。访问每个实例

http://cloud01:3333
http://cloud02:4444

Broswer扩展。 Multilogin或Multiaccount

还有另一种解决方法。如果我使用这个铬扩展,问题就会消失,因为会话是分开处理的:

答案 1 :(得分:0)

如果您有权访问源代码,则可以更改此文件,如下所示,并检查问题是否已解决。

<强>附加元件/网络/控制器/ main.py

if db != request.session.db:
     request.session.logout()
     request.session.db = db
     abort_and_redirect(request.httprequest.url)

并删除 - &gt; request.session.db = db

低于此 IF 语句。

答案 2 :(得分:0)

请尝试以下更改:

<强>的OpenERP /插件/碱/ IR / ir_http.py

  

在第140行的某个方法 _handle_exception 中,你会发现这段代码:

attach = self._serve_attachment()
if attach:
    return attach
  

将其替换为:

if isinstance(exception, werkzeug.exceptions.HTTPException) and exception.code == 404:
    attach = self._serve_attachment()
    if attach:
        return attach

答案 3 :(得分:0)

您可以使用计算机上的单个OpenERP服务器完美地为所有数据库提供服务。不幸的是,你没有提到你看到的错误以及你期望的结果 - 让你有点难以帮助你; - )

无论如何,这里有一些基于您提供的信息的随机想法:

  • 如果您在OpenERP上没有监听所有接口时遇到问题,请尝试在配置文件中指定0.0.0.0作为xmlrpc_interface,这应该让所有IP上的OpenERP监听8069。

  • 请注意,如果您要连接到例如Apache,则无关紧要。 http://www.sample.com:8069/?db=openerp因为您直接连接到OpenERP。如果你想通过Apache,你需要在vhost配置中设置ReverseProxy规则,然后OpenERP不需要监听所有公共IP。

  • OpenERP 6.1及更高版本可以根据虚拟主机名自动检测数据库名称,并过滤可用数据库的名称:您需要使用--db-filter参数启动它,该参数表示使用的模式过滤可用数据库列表。 %h表示域名,%d是该域的第一个域组件。因此,例如使用--db-filter = ^%d $,如果我使用http://test.example.com:8069结束服务器,我将只看到测试数据库。如果只有一个数据库匹配,则不显示该列表,并且用户将直接在正确的数据库上结束。如果确保OpenERP看到外部主机名,即在Apache代理配置中设置X-Forwarded-Host标头并启用OpenERP的--proxy模式,这甚至可以在Apache反向代理之后工作。

    端口重用问题的出现是因为您尝试在同一个接口/端口组合上启动多个OpenERP服务器。这是不可能的,除非你小心每个IP启动一个服务器,并在xmlrpc_interface参数中设置IP,我认为你不需要这样做。 Apache支持的基于命名的虚拟主机全部由一个主进程处理,该进程在所有接口上侦听端口80。如果你想对OpenERP做同样的事情,你只需要为你的所有域启动一个OpenERP服务器,并让它在0.0.0.0,端口8069上监听,如上所述。 最重要的是,您不清楚在各种配置文件中您将设置不同的内容。在具有相同代码的同一台机器上运行40个不同的OpenERP服务器听起来有点过分。 OpenERP设计为多租户,因此可以从同一台服务器提供许多(读取数百个)数据库。