Contenedores

Información general

Cada compilación está aislada dentro de su propio contenedor (un contenedor de espacio de nombre de Linux).

La base es un sistema Ubuntu, donde se instalan todas las dependencias necesarias de Odoo, así como sus paquetes comunes útiles.

Si su proyecto necesita de dependencias adicionales de Python, o de lanzamientos más recientes, puede definir un archivo requirements.txt en la raíz de sus ramas listándolas. La plataforma se encargará de instalar las dependencias en sus contenedores. La documentación de especificadores de requisitos pip puede ayudarle a redactar el archivo requirements.txt. Para ver un ejemplo más concreto, revise el archivo requirements.txt de Odoo.

También se consideran los archivos requirements.txt de submódulos. La plataforma busca los archivos requirements.txt en todas las carpetas que contengan módulos de Odoo: no en la carpeta del módulo, sino en su carpeta madre.

Estructura de directorio

Ya que los contenedores tienen base en Ubuntu, su estructura de directorio sigue el estándar de jerarquía del sistema de archivos de Linux. En Información general del árbol de sistema de archivos de Ubuntu se explican los directorios principales.

A continuación se encuentran los directorios pertinentes 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

Se instalan Python 2.7 y 3.5 en los contenedores. Sin embargo:

  • 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 con el shell, puede acceder a la base de datos al usar 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 lleve a un cambio (UPDATE, DELETE, ALTER, …), especialmente para su base de datos de producción.

El mecanismo de transacción es su red de seguridad en caso de cometer un error. Solamente debe revertir sus cambios para regresar su base de datos a un estado anterior.

Por ejemplo, tal vez olvidó establecer su 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 revertir para anular los cambios no deseados que hizo por accidente, y 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

Sin embargo, no olvide confirmar o revertir su transacción después de hacerla. Las transacciones abiertas pueden bloquear registros en sus tablas y puede que su base de datos en ejecución espere hasta que se liberen, lo que causa una pausa indefinida en su servidor.

Además, cuando sea posible, utilice sus bases de datos de prueba para probar sus declaraciones. Le da una red de seguridad adicional.

Ejecutar un servidor de Odoo

Puede iniciar una instancia de servidor de Odoo desde un shell de contenedor. No podrá acceder a ella desde el mundo exterior 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á de inmediato la instancia del servidor después de que completar las operaciones que le pidió.

Hay más opciones disponibles que se describen en la documentación de la interfaz de línea de comandos.

Puede encontrar en los registros (~/logs/odoo.log) los addons path (rutas 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 15.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/15.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 cuidado, especialmente con su base de datos de producción. Las operaciones que realice al ejecutar esta instancia de servidor de Odoo no están aisladas: los cambios serán efectivos en la base de datos. Siempre haga sus pruebas en sus bases de datos de prueba.

Depuración de bugs en Odoo.sh

La depuración de bugs en una compilación de Odoo.sh no es muy diferente a alguna otra aplicación de Python. Este artículo solo explica las especificaciones y limitaciones de la plataforma de Odoo.sh, y asume que usted ya sabe cómo usar un depurador.

Nota

Si aún no sabe cómo depurar bugs de una aplicación de Python, hay varios cursos introductorios que puede encontrar en el internet con facilidad.

Puede usar pdb, pudb o ipdb para depurar los bugs de su código de Odoo.sh. Como el servidor se ejecuta fuera de un shell, no puede activar el depurador directamente desde el backend de su instancia de Odoo, ya que el depurador necesita un shell para operar.

  • pdb se instala en cada contenedor de forma predeterminada.

  • Si desea usar pudb o ipdb, debe instalarlos antes.

    Para hacerlo, tiene dos opciones:

    • de forma temporal (solo en la compilación actual):

      $  pip install pudb --user
      

      o

      $  pip install ipdb --user
      
    • de forma permanente: agregue pudb o ipdb al archivo requirements.txt de su proyecto.

Posteriormente, edite el código en el que desea activar el depurador y agregue esto:

import sys
if sys.__stdin__.isatty():
    import pdb; pdb.set_trace()

La condición sys.__stdin__.isatty() es un truco que 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.

Captura de pantalla de la consola que muestra el ``pdb`` en ejecución en un shell de Odoo.sh.