Contenedores¶
Información general¶
Cada compilación está aislada dentro de su propio contenedor (un contenedor de espacio de nombres de Linux).
La base es un sistema Ubuntu en donde se instalan todas las dependencias necesarias de Odoo y sus paquetes comunes útiles.
Si su proyecto necesita otras dependencias de Python o lanzamientos más recientes, colóquelas en un archivo requirements.txt
en su rama principal. La plataforma se encargará de instalar las dependencias en sus contenedores. La documentación sobre los especificadores de requisitos pip puede ayudarle a elaborar su archivo requirements.txt
. Revise el archivo requirements.txt de Odoo para visualizar un ejemplo concreto.
También se consideran los archivos requirements.txt
de los submódulos. La plataforma busca los archivos requirements.txt
en todas las carpetas que incluyen módulos de Odoo: no en la carpeta del módulo, sino en su carpeta principal.
Estructura del directorio¶
Los contenedores están basados en Ubuntu, así que la estructura de su directorio sigue el estándar de jerarquía del sistema de archivos de Linux. En la información general del árbol del sistema de archivos de Ubuntu encontrará una explicación sobre los directorios principales.
Estos son los respectivos directorios de Odoo.sh:
.
├── home
│ └── odoo
│ ├── src
│ │ ├── odoo Odoo Community source code
│ │ │ └── odoo-bin Odoo server executable
│ │ ├── enterprise Odoo Enterprise source code
│ │ ├── themes Odoo Themes source code
│ │ └── user Your repository branch source code
│ ├── data
│ │ ├── filestore database attachments, as well as the files of binary fields
│ │ └── sessions visitors and users sessions
│ └── logs
│ ├── install.log Database installation logs
│ ├── odoo.log Running server logs
│ ├── update.log Database updates logs
│ └── pip.log Python packages installation logs
└── usr
├── lib
│ ├── python2.7
│ └── dist-packages Python 2.7 standard libraries
│ ├── python3
│ └── dist-packages Python 3 standard libraries
│ └── python3.5
│ └── dist-packages Python 3.5 standard libraries
├── local
│ └── lib
│ ├── python2.7
│ │ └── dist-packages Python 2.7 third-party libraries
│ └── python3.5
│ └── dist-packages Python 3.5 third-party libraries
└── usr
└── bin
├── python2.7 Python 2.7 executable
└── python3.5 Python 3.5 executable
Python 2.7 y 3.5 se instala en los contenedores, pero tome en cuenta las siguientes consideraciones:
Si su proyecto está configurado para usar Odoo 10.0, el servidor de Odoo se ejecuta con Python 2.7.
Si su proyecto está configurado para usar Odoo 11.0 o superior, el servidor de Odoo se ejecuta con Python 3.5.
Shell de la base de datos¶
Al acceder a un contenedor mediante el shell, puede acceder a la base de datos con psql.
odoo@odoo-addons-master-1.odoo.sh:~$ psql
psql (9.5.2, server 9.5.11)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
odoo-addons-master-1=>
Advertencia: Use transacciones (BEGIN…COMMIT/ROLLBACK) para cada declaración sql que produzca cambios (UPDATE, DELETE, ALTER, etc.), en especial en su base de datos de producción.
El mecanismo de transacción es su red de seguridad en caso de que ocurra un error, solo debe revertir los cambios para restaurar su base de datos a un estado anterior.
Por ejemplo, tal vez olvidó establecer la condición WHERE.
odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK
En ese caso, puede realizar una reversión para anular los cambios no deseados que hizo por accidente y luego volver a escribir la declaración:
odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-addons-master-1=> COMMIT;
COMMIT
No olvide confirmar o revertir su transacción después de hacerla. Las transacciones abiertas pueden bloquear registros en sus tablas y es posible que su base de datos activa deba esperar hasta que se liberen, lo que ocasiona que haya una pausa indefinida en el servidor.
Además, cuando sea posible, use sus bases de datos de prueba para probar primero las declaraciones. Hacer eso le proporcionará una red de seguridad adicional.
Ejecutar un servidor de Odoo¶
Puede iniciar una instancia de servidor de Odoo desde el shell del contenedor. No podrá acceder a ella con un navegador, pero puede:
Usar el shell de Odoo.
$ odoo-bin shell
>>> partner = env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1)
>>> partner.name
'ASUSTeK'
>>> partner.name = 'Odoo'
>>> env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1).name
'Odoo'
Instalar un módulo.
$ odoo-bin -i sale --without-demo=all --stop-after-init
Actualizar un módulo.
$ odoo-bin -u sale --stop-after-init
Ejecutar las pruebas de un módulo.
$ odoo-bin -i sale --test-enable --log-level=test --stop-after-init
En los comandos anteriores, el argumento:
--without-demo=all
evita que los datos de demostración se carguen en todos los módulos.--stop-after-init
cerrará la instancia del servidor de inmediato luego de completar las operaciones que le solicitó.
Consulte la documentación de la interfaz de línea de comandos para conocer otras opciones y leer sobre ellas.
En los registros (~/logs/odoo.log) puede encontrar la ruta de complementos que Odoo.sh utiliza para ejecutar su servidor. Busque «odoo: addons paths»:
2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.0
2018-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2018-02-19 10:51:39,268 4 INFO ? odoo: addons paths: ['/home/odoo/data/addons/18.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']
Tenga precaución, en particular con su base de datos de producción. Las operaciones que lleve a cabo al ejecutar esta instancia de servidor de Odoo no están aisladas y los cambios serán efectivos en la base de datos. Siempre haga sus pruebas en las bases de datos que no son de producción.
Depuración de errores y bugs en Odoo.sh¶
Depurar una compilación de Odoo.sh no es muy diferente a alguna otra aplicación de Python. Este artículo solo explica las particularidades y limitaciones de la plataforma Odoo.sh, además de que asume que sabe cómo usar un depurador.
Nota
Si aún no sabe cómo depurar una aplicación de Python, hay varios cursos introductorios que puede encontrar en internet con facilidad.
Puede usar pdb
, pudb
o ipdb
para depurar su código de Odoo.sh. El servidor se ejecuta fuera de un shell, así que no puede activar el depurador desde el backend de su instancia de Odoo, pues el depurador necesita un shell para funcionar.
En cada contenedor se instala pdb de forma predeterminada.
Si desea usar pudb o ipdb, debe instalarlos antes.
Tiene dos opciones para hacerlo:
de forma temporal (solo en la compilación actual):
$ pip install pudb --user
o
$ pip install ipdb --user
de forma permanente si agrega
pudb
oipdb
al archivorequirements.txt
de su proyecto.
Después, edite el código en el que desea activar el depurador y agregue lo siguiente:
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
La condición sys.__stdin__.isatty()
detecta si está ejecutando Odoo desde un shell.
Guarde el archivo y ejecute el shell de Odoo:
$ odoo-bin shell
Por último, a través del shell de Odoo, puede activar el código, función o método que desea depurar.
