2015-05-12 14 views
6

Ho due istanze di Odoo in un server nel cloud. Se faccio le seguenti operazioni ottengo "Internal Server Error":Perché ricevo "Errore interno server" con due istanze di Odoo v8 in esecuzione contemporaneamente nello stesso browser?

  1. Faccio login in prima istanza (http://111.222.33.44:3333)
  2. ho chiudere la sessione
  3. ho caricare l'indirizzo della seconda istanza nella stesso browser (http://111.222.33.44:4444)

Se voglio lavorare in seconda istanza (in un altro porto), ho bisogno di rimuovere i cookie del browser prima a causa dell'errore. Se li rimuovo, tutto funziona bene.

Se li carico in diversi browser (Firefox e Chromium) allo stesso tempo, funzionano bene.

Penso che sia un problema di Odoo, ma non ne sono sicuro. Ho installato l'ultima versione.

Non è un problema NginX perché ho provato con e senza di esso.

Cosa potrebbe essere sbagliato?

Aggiornamento:

ho trovato una soluzione temporale con la creazione di una coppia di nome di dominio nel mio computer portatile in /etc/hosts:

111.222.33.44 cloud01 
111.222.33.44 cloud02 

Poi i cookie non interferiscono con l'altro più, ma non mi piace questa soluzione

Aggiornamento 2:

C'è un'altra soluzione. Se utilizzo questa estensione chromium il problema non appare: MultiLogin

Qualche idea per risolverlo definitivamente?

+0

Quando si esegue Odoo senza proxy inverso (ovvero appena estratto dalla confezione), Odoo può funzionare correttamente solo per un solo database. Quando si tenta di cambiare database, non è possibile distinguere tra diversi database, ad esempio per sapere quale sito Web appartiene a quale database. Se vuoi anche distribuire Odoo nell'ambiente di produzione, ti suggerisco di usare reverse proxy e sottodomini per i database (come db_name.host.com). Questa è una buona guida per questo: http: //www.schenkels.nl/2014/12/reverse-proxy-with-odoo-8-nginx-ubuntu-14-04-lts/ – Andrius

+0

Sì, sto già utilizzando NginX. Ma penso che se i cookie sono configurati correttamente dovrebbe funzionare bene cambiare database e porte con lo stesso dominio – ChesuCR

+0

Ciao, questo problema è ancora in stato aperto su github. https://github.com/odoo/odoo/pull/6705. Quindi suppongo che avrai bisogno di utilizzare diversi browser o soluzioni alternative fatte da te per un po 'di tempo. –

risposta

0

Se si ha accesso al codice sorgente è possibile modificare questo file come mostrato di seguito e verificare se il problema è risolto o meno.

addons/web/controller/main.py

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

ed eliminare -> request.session.db = db

che è sotto di questo SE dichiarazione.

+0

mm no, non funziona, sto ancora ottenendo lo stesso "Errore interno del server". Forse è questo il motivo per cui il problema è ancora aperto. Sei sicuro che il problema sia il motivo per cui sto ricevendo l'errore? – ChesuCR

0

prova a seguire i cambiamenti in:

OpenERP/addons/base/ir/ir_http.py

Nel metodo _handle_exception da qualche parte intorno alla linea 140 si trova questo pezzo di codice:

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

sostituirlo con:

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

Grazie !! Ma avevo già quella linea nel codice! E non funziona ancora :( – ChesuCR

0

È possiamo perfettamente noi Servirò tutti i database con un unico server OpenERP sulla tua macchina. Purtroppo lei non ha citato quale errore si stava vedendo e quello che vi aspettavate di conseguenza - lo rende un po 'più difficile per aiutarti ;-)

Ad ogni modo, ecco alcune idee casuali in base alle informazioni che hai fornito:

  • In caso di problemi con OpenERP che non ascolta su tutte le interfacce, provare a specificare 0.0.0.0 come xmlrpc_interface nel file di configurazione, questo dovrebbe avere OpenERP in ascolto su 8069 su tutti gli IP.

  • Si noti che Apache non è pertinente se ci si connette ad es. http://www.sample.com:8069/?db=openerp perché ti stai collegando direttamente a OpenERP. Se vuoi passare attraverso Apache, devi configurare le regole ReverseProxy nelle tue configurazioni di vhost, e OpenERP non ha bisogno di ascoltare tutti gli IP pubblici allora.

  • OpenERP 6.1 e versioni successive possono rilevare automaticamente il nome del database in base al nome dell'host virtuale e filtrare il nome dei database disponibili: è necessario avviarlo con il parametro --db-filter, che rappresenta un modello utilizzato per filtra l'elenco dei database disponibili. % h rappresenta il nome del dominio e% d è il primo componente di dominio di quel dominio. Quindi, ad esempio con --db-filter = ^% d $ vedrò il database di test solo se finisco sul server usando http://test.example.com:8069. Se c'è una sola corrispondenza del database, l'elenco non viene visualizzato e l'utente finirà direttamente nel database corretto. Questo funziona anche dietro i proxy inversi Apache se ci si assicura che OpenERP veda il nome host esterno, cioè impostando un'intestazione X-Forwarded-Host nella configurazione del proxy Apache e abilitando la modalità --proxy di OpenERP.

    Il problema di riutilizzo delle porte deriva dal fatto che si sta tentando di avviare più server OpenERP sulla stessa combinazione interfaccia/porta. Questo semplicemente non è possibile a meno che non si faccia attenzione ad avviare un solo server per IP con l'IP impostato nel parametro xmlrpc_interface, e non penso che sia necessario. Gli host virtuali basati su named che Apache supporta sono tutti gestiti da un singolo processo master che ascolta sulla porta 80 su tutte le interfacce. Se vuoi fare lo stesso con OpenERP devi solo avviare un server OpenERP per tutti i tuoi domini, e farlo ascoltare su 0.0.0.0, porta 8069, come ho spiegato sopra. Inoltre non è chiaro cosa avresti impostato diversamente nei vari file di configurazione. L'esecuzione di 40 diversi server OpenERP sulla stessa macchina con codice identico suona come un sacco di eccessivo. OpenERP è progettato per essere multi-tenant in modo che molti (leggi: centinaia) di database possano essere serviti dallo stesso server.

+0

"L'errore del server interno" viene visualizzato solo sul lato client.Penso che si tratti di un problema di gestione dei cookie di Odoo.Non tiene conto che io uso un'istanza diversa in ogni porta di il server. E ho bisogno di usare più di un'istanza, non posso usarne una solo perché voglio rendere visibili diversi database in ogni istanza, con moduli diversi – ChesuCR

+0

Hai provato --db-filter parameter all'avvio del server ? Se no, provalo. –