Advanced topics

This section covers advanced features of Odoo.sh related to containers, Git submodules, and scheduled actions.

Contenedores

Each build is isolated in its own container (Linux namespace container). The base is an Ubuntu-based system on which all of Odoo’s required dependencies, as well as common, useful packages, are installed.

If your project requires additional Python dependencies or more recent releases, you can define a requirements.txt file at the root of your branches that lists them. The platform will ensure these dependencies are installed in your containers.

Ver también

Nota

The requirements.txt files of submodules are also taken into account. The platform looks for such files in the parent folder of each folder containing an Odoo module.

Estructura del directorio

As the containers are Ubuntu-based, their directory structure follows the Filesystem Hierarchy Standard.

The directories relevant to Odoo.sh are the following:

.
├── home
│    └── odoo
│         ├── backup.daily
│         ├── 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
│         └── 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
└── usr
     ├── lib
     │    └── pythonX.XX
     │         └── dist-packages       Python X.XX standard libraries
     ├── local
     │    └── lib
     │         └── pythonX.XX
     │              └── dist-packages  Python X.XX third-party libraries
     └── usr
          └── bin
               └── pythonX.X           Python X.XX executable

Shell de la base de datos

While accessing a container with the shell, you can access the database using the psql command.

odoo@odoo-master-1.odoo.sh:~$ psql
psql (16.9)
Type "help" for help.

odoo-master-1=>

Advertencia

Always use transactions (e.g., BEGIN (…) COMMIT / ROLLBACK) when an SQL statement leads to changes (e.g., UPDATE, DELETE, ALTER, etc.) , especially for your production database. The transaction mechanism is your safety net in case of a mistake. You simply have to rollback your changes to revert your database to its previous state.

Do not forget to commit or roll back transactions. Open transactions may lock records in your tables, and a running database may wait for them to be released, causing a server to hang indefinitely.

In addition, use your staging databases to test your statements first. It gives you an extra safety net.

Example

You forgot to set your WHERE condition. In such a case, you can rollback to revert the unwanted change:

odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-master-1=> ROLLBACK;
ROLLBACK

Then, rewrite the statement and commit the change:

odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-master-1=> COMMIT;
COMMIT

Ejecutar un servidor de Odoo

You can start an Odoo server instance from a container shell. You won’t be able to access it from the outside world with a web browser, but you can, for example:

  • Usa la 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'
    
  • Instala un módulo:

    odoo-bin -i sale --without-demo=all --stop-after-init
    

    Truco

    • El argumento --without-demo=all evita que se carguen datos de demostración para todos los módulos.

    • El argumento --stop-after-init detiene inmediatamente la instancia del servidor una vez finalizada la operación.

  • Actualiza un módulo:

    odoo-bin -u sale --stop-after-init
    
  • Ejecuta las pruebas de un módulo:

    odoo-bin -i sale --test-enable --log-level=test --stop-after-init
    

Para encontrar la ruta de los módulos que Odoo.sh utiliza para ejecutar tu servidor, busca «odoo: addons paths» en los registros (~/logs/odoo.log).

2025-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.0
2025-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2025-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']

Advertencia

Las operaciones que realizas en una instancia del servidor de Odoo no están aisladas; los cambios se reflejarán en la base de datos. Recuerda realizar siempre las pruebas en tus bases de datos de prueba.

Depuración de bugs en Odoo.sh

Nota

Depurar una compilación de Odoo.sh no es muy diferente de depurar otra aplicación Python. Por ello, el objetivo de esta sección es cubrir las particularidades y limitaciones de la plataforma Odoo.sh, dando por hecho que ya sabes usar un depurador.

Puedes usar pdb, pudb o ipdb para depurar código en Odoo.sh. Como el servidor se ejecuta fuera de una shell, no puedes iniciar el depurador directamente desde el backend de Odoo, ya que requiere una shell para funcionar.

En cada contenedor se instala pdb de forma predeterminada.

Truco

Para usar pudb o ipdb, es necesario instalarlos de una de estas formas:

  • de forma permanente, añadiendo pudb o ipdb al archivo requirements.txt de tu proyecto, o

  • de forma temporal (solo en la compilación actual) ejecutando el comando correspondiente:

    pip install pudb --user
    
    pip install ipdb --user
    
  1. Para activar el depurador, añade esto al código que quieres depurar:

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

    Nota

    La condición sys.__stdin__.isatty() es una solución alternativa para detectar si estás ejecutando Odoo desde una shell.

  2. A continuación, guarda el archivo y ejecuta la shell de Odoo:

    odoo-bin shell
    
  3. Usa la shell de Odoo para activar el código que quieres depurar.

    pdb ejecutándose en una shell de Odoo.sh

Submódulos

Los submódulos de Git te permiten enlazar repositorios externos directamente en tu proyecto sin copiar y pegar código, lo que agiliza el despliegue al clonar las dependencias junto con tu código base principal. Mantienes un control de versiones preciso al elegir ramas exactas y fijar revisiones de commit específicas para actualizar cuando quieras.

En Odoo.sh, la plataforma detecta automáticamente los submódulos y los añade a tu ruta de addons para la instalación de la base de datos, siempre que configures una clave de despliegue en los ajustes de tu proyecto y repositorio al integrar repositorios privados.

Agregar un submódulo

Nota

Actualmente, no es posible añadir repositorios privados con Odoo.sh. Aun así, puedes hacerlo con Git.

  1. En la vista Ramas de tu proyecto de Odoo.sh, elige la rama en la que quieras añadir un submódulo.

  2. En la esquina superior derecha, haz clic en Submódulo y, después, en Ejecutar en Odoo.sh.

  3. En el cuadro de diálogo, completa lo siguiente:

    • URL del repositorio: la URL SSH del repositorio

      Truco

      En GitHub, haz clic en Clone, selecciona SSH y copia la URL.

    • Rama: la rama específica que se debe utilizar

    • Ruta: la carpeta en la que se debe añadir el submódulo dentro de tu rama

Truco

Al añadir un repositorio que contiene muchos módulos, es posible que quieras ignorar algunos si se instalan automáticamente. Para ello, añade el prefijo . a la carpeta de tu submódulo (por ejemplo, .carpeta). La plataforma ignorará esta carpeta y podrás elegir manualmente los módulos creando enlaces simbólicos a ellos desde otra carpeta.

Acciones programadas

En la plataforma Odoo.sh, las acciones planificadas se implementan de forma ligeramente distinta a la de un servidor Odoo habitual y se ejecutan según el mejor esfuerzo posible. Esto se debe a que puede haber varios clientes en el mismo servidor, y a cada uno se le garantiza una parte proporcional de los recursos del servidor. Por lo tanto, no se puede garantizar un tiempo de ejecución exacto para las acciones planificadas.

Importante

No esperes que ninguna acción planificada se ejecute con más frecuencia que cada cinco minutos.

As the execution time of scheduled actions is limited, it is advised to ensure your scheduled actions:

  • Work on small batches of records.

  • Commit their work after processing each batch so that if they are interrupted by the time limit, they do not need to start over.

  • Are idempotent, i.e, they must not cause side effects if they are started more often than expected.