6
votes

I have two instances of Odoo in a server in the cloud. If I make the following steps I get "Internal Server Error":

  1. I make login in the first instance (http://111.222.33.44:3333)
  2. I close the session
  3. I load the address of the second instance in the same browser (http://111.222.33.44:4444)

If I want to work in the second instance (in another port), I need to remove the browser cookies first to acces to the other Odoo instance. If do this everything works fine.

If I load them in differents browsers (Firefox and Chromium) at the same time, they work well as well.

It's not a NginX issue because I tried with and without it.

Is there a way to solve this permanently? Is this the expected behaviour?

4
When you run Odoo without reverse proxy (aka just out of the box), Odoo can only properly work for one database only. When you try to switch databases, it can't distinguish between different databases, for example to know which website belongs to which database. If you want too deploy Odoo in production environment, I suggest you to use reverse proxy and subdomains for databases (like db_name.host.com). This is a good guide for it: schenkels.nl/2014/12/…Andrius
Yes, I'm already using NginX. But I think that if the cookies are correctly configured it should work fine switching databases and ports with the same domainChesuCR
Hello, this issue is still in open state on github. github.com/odoo/odoo/pull/6705 . So I guess you are going to need to use different browsers or the workaround made by yourself for some time.Rutul Raval

4 Answers

0
votes

If you have access to the sourcecode you can change this file like shown below and check if the issue is solved or not.

addons/web/controllers/main.py

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

And delete --> request.session.db = db

which is below this IF statement.

0
votes

Try following changes in:

openerp/addons/base/ir/ir_http.py

In method _handle_exception somewhere around line 140 you will find this piece of code:

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

Replace it with:

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

You can perfectly well serve all the databases with a single OpenERP server on your machine. Unfortunately you did not mention what error you were seeing and what you expected as a result - makes it a bit harder to help you ;-)

Anyway, here are some random ideas based on the information you provided:

  • If you have a problem with OpenERP not listening on all interfaces, try to specify 0.0.0.0 as the xmlrpc_interface in the configuration file, this should have OpenERP listen on 8069 on all IPs.

  • Note that Apache is not relevant if you're connecting to e.g. http://www.sample.com:8069/?db=openerp because you're directly connecting to OpenERP. If you want to go through Apache, you need to setup ReverseProxy rules in your vhost configs, and OpenERP does not need to listen to all public IPs then.

  • OpenERP 6.1 and later can autodetect the database name based on the virtual host name, and filter the name of the available databases: you need to start it with the --db-filter parameter, which represents a pattern used to filter the list of available databases. %h represents the domain name and %d is the first domain component of that domain. So for example with --db-filter=^%d$ I will only see the test database if I end up on the server using http://test.example.com:8069. If there's only one database match, the list is not displayed and the user will directly end up on the right database. This works even behind Apache reverse proxies if you make sure that OpenERP see the external hostname, i.e. by setting a X-Forwarded-Host header in your Apache proxy config and enabling the --proxy mode of OpenERP.

    The port reuse problem comes because you are trying to start multiple OpenERP servers on the same interface/port combination. This is simply not possible unless you are careful to start just one server per IP with the IP set in the xmlrpc_interface parameter, and I don't think you need that. The named-based virtual hosts that Apache supports are all handled by a single master process that listens on port 80 on all the interfaces. If you want to do the same with OpenERP you only need to start one OpenERP server for all your domains, and make it listen on 0.0.0.0, port 8069, as I explained above. On top of that it's not clear what you would have set differently in the various config files. Running 40 different OpenERP servers on the same machine with identical code sounds like a lot of overkill. OpenERP is designed to be multi-tenant so that many (read: hundreds) of databases can be served from the same server.

0
votes

Finally I think this is the expected behaviour. The cookies of all websites are stored specifically for each website (for each domain) in the web browser. So if I only change the port the cookies of the first instance are in conflict with the cookies of the other instance because the have the same domain (111.222.33.44 in my example).

So there are some workarounds:

Change Domain Locally

Creating a couple of domain name in my laptop in /etc/hosts:

111.222.33.44  cloud01
111.222.33.44  cloud02

Then the cookies don't interfere with each other anymore. To access to each instance

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

Broswer Extension. Multilogin or Multiaccount

There is another workaround. If I use this chromium extension the problem disappears because the sessions are treated separately: