Почему я получаю "внутреннюю ошибку сервера", запускающую два экземпляра Odoo (тот же домен, но разные порты)?
у меня есть два экземпляра Odoo на сервере в облаке. Если я сделаю следующие шаги, я получу "внутреннюю ошибку сервера":
- я делаю логин в первой инстанции (
http://111.222.33.44:3333
) - Я закрываю сессию
- я загружаю адрес второго экземпляра в том же браузере (
http://111.222.33.44:4444
)
Если я хочу работать во втором экземпляре (в другом порту), мне нужно сначала удалить куки браузера, чтобы получить доступ к другому экземпляру Odoo. Если сделать это все работает нормально.
Если я загружаю их в разные браузеры (Firefox и Chromium) одновременно, они также работают хорошо.
это не проблема NginX, потому что я пытался с ним и без него.
есть ли способ решить эту проблему навсегда? Это ожидаемое поведение?
4 ответов
Если у вас есть доступ к исходному коду вы можете изменить этот файл, как показано ниже, и проверьте, если проблема решена или нет.
addons/web/controllers/main.py
if db != request.session.db:
request.session.logout()
request.session.db = db
abort_and_redirect(request.httprequest.url)
удалить --> запрос.сессия.db = db
который находится ниже этого если заявление.
попробуйте следующие изменения в:
openerp/addons/base/ir/ir_http.py
методом _handle_exception где-то около строки 140 вы найдете этот кусок кода:
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
вы можете отлично обслуживать все базы данных с помощью одного сервера OpenERP на вашем компьютере. К сожалению, вы не упомянули, какую ошибку вы видели и что вы ожидали в результате-делает его немного сложнее, чтобы помочь вам ; -)
в любом случае, вот некоторые случайные идеи, основанные на предоставленной Вами информации:
Если у вас есть проблема с OpenERP, не прослушивающим все интерфейсы, попробуйте указать 0.0.0.0 как xmlrpc_interface в конфигурации файл, это должно иметь OpenERP слушать 8069 на всех IPs.
обратите внимание, что Apache не имеет значения, если вы подключаетесь, например,http://www.sample.com:8069/?db=openerp потому что вы напрямую подключаетесь к OpenERP. Если вы хотите пройти через Apache, вам нужно настроить правила ReverseProxy в ваших конфигурациях vhost, и OpenERP не нужно слушать все общедоступные IPs.
-
OpenERP 6.1 и более поздние версии могут автоматически определять имя базы данных основываясь на имени виртуального хоста и фильтруя имя доступных баз данных: вам нужно запустить его с параметром --db-filter, который представляет собой шаблон, используемый для фильтрации списка доступных баз данных. %h представляет доменное имя, А %d является первым доменным компонентом этого домена. Так, например, с --db-filter=^%d$ Я буду видеть тестовую базу данных, только если я в конечном итоге на сервере использую http://test.example.com:8069. Если есть только одно совпадение базы данных, список не отображается и пользователь сразу попадет на нужную базу данных. Это работает даже за обратными прокси-серверами Apache, если вы убедитесь, что OpenERP видит внешнее имя хоста, т. е. установив заголовок X-Forwarded-Host в конфигурации прокси-сервера Apache и включив режим --proxy OpenERP.
проблема повторного использования порта возникает, потому что вы пытаетесь запустить несколько серверов OpenERP в одной комбинации интерфейс/порт. Это просто невозможно, если вы не будете осторожны, чтобы начать только один сервер на IP с IP, установленным в параметре xmlrpc_interface, и я не думаю, что вам это нужно. Виртуальные хосты на основе имен, поддерживаемые Apache, обрабатываются одним главным процессом, который прослушивает порт 80 на всех интерфейсах. Если вы хотите сделать то же самое с OpenERP, вам нужно запустить только один сервер OpenERP для всех ваших доменов и заставить его слушать 0.0.0.0, порт 8069, как я объяснил выше. Кроме того, неясно, что бы вы установили по-разному в различной конфигурации файлы. Запуск 40 различных серверов OpenERP на одной машине с одинаковым кодом звучит как много излишеств. OpenERP предназначен для нескольких арендаторов, так что многие (читай: сотни) баз данных могут обслуживаться с одного сервера.
наконец, я думаю, что это ожидаемое поведение. Файлы cookie всех веб-сайтов хранятся специально для каждого веб-сайта (для каждого домена) в веб-браузере. Поэтому, если я только изменяю порт, cookies первого экземпляра конфликтуют с cookies другого экземпляра, потому что имеют тот же домен (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
есть еще один обходной путь. Если я использую это расширение chromium, проблема исчезает, потому что сеансы обрабатываются отдельно: