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
For a concrete example, check out the Odoo Community requirements.txt file.
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.
Ver también
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-initTruco
El argumento
--without-demo=allevita que se carguen datos de demostración para todos los módulos.El argumento
--stop-after-initdetiene 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
Ver también
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
pudboipdbal archivorequirements.txtde tu proyecto, ode forma temporal (solo en la compilación actual) ejecutando el comando correspondiente:
pip install pudb --user
pip install ipdb --user
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.A continuación, guarda el archivo y ejecuta la shell de Odoo:
odoo-bin shell
Usa la shell de Odoo para activar el código que quieres depurar.
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.
En la vista Ramas de tu proyecto de Odoo.sh, elige la rama en la que quieras añadir un submódulo.
En la esquina superior derecha, haz clic en Submódulo y, después, en Ejecutar en Odoo.sh.
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
En una terminal, en la carpeta donde se clonó su repositorio de Git, diríjase a la rama en la que desea agregar un submódulo:
git checkout <branch>
Añade el submódulo:
git submodule add -b <branch> <git@yourprovider.com>:<username/repository.git> <path>
<git@yourprovider.com>:<username/repository.git>: la URL SSH del repositorio que quieres añadir como submódulo
<branch>: la rama que quieres usar en el repositorio anterior
<path>: la carpeta en la que quieres añadir este submódulo
Confirma y envía los cambios (commit y push):
git commit -a && git push -u <remote> <branch><remote>: el repositorio en el que quieres enviar tus cambios. En una configuración estándar de Git, se trata de origin.
<branch>: la rama en la que quieres enviar tus cambios. Probablemente sea la rama que has extraído (checkout) en el primer paso.
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.