Preguntas técnicas frecuentes

«Las acciones programadas no se ejecutan en el momento exacto esperado»

No podemos garantizar un tiempo exacto de ejecución para las acciones programadas en la plataforma de Odoo.sh.

Esto se debe a que puede haber varios clientes en el mismo servidor y debemos garantizar una distribución justa del servidor para cada uno de ellos. La implementación de las acciones programadas es un poco distinta a la manera en la que ocurre en un servidor común de Odoo y se ejecutan bajo una política de mejor esfuerzo.

Advertencia

No esperes que ninguna acción programada se ejecute con una frecuencia mayor a cada 5 minutos.

¿Las acciones programadas tienen buenas prácticas que debería seguir?

Odoo.sh siempre limita el tiempo de ejecución de las acciones programadas (*también llamadas* crons), así que debes tener esto en cuenta cuando desarrolles tus propios crons.

Te aconsejamos lo siguiente:

  • Tus acciones programadas deben trabajar con pequeños lotes de registros.

  • Tus acciones programadas deben confirmar su trabajo después de procesar cada lote, así no tendrás que empezar de nuevo si el límite de tiempo las interrumpe.

  • Tus acciones planificadas deben ser idempotentes. No deben causar efectos secundarios si las ejecutas más seguido de lo esperado.

¿Cómo puedo automatizar tareas cuando la dirección IP cambia?

Odoo.sh le notifica a los administradores del proyecto si hay cambios en la dirección IP. Además, cuando la dirección IP de una instancia de producción cambia, se realiza una petición HTTP GET en la ruta /_odoo.sh/ip-change con la nueva dirección IP incluida como parámetro en la cadena de consulta (new) junto con la dirección IP anterior como parámetro adicional (old).

Este mecanismo permite aplicar acciones personalizadas en respuesta al cambio de dirección IP (por ejemplo, enviar un correo, contactar una API de firewall, configurar objetos en la base de datos, etc.).

Por motivos de seguridad, la ruta /_odoo.sh/ip-change solo es accesible de forma interna por la propia plataforma y devuelve una respuesta 403 al intentar acceder por otros medios.

Este es un ejemplo de pseudoimplementación:

class IPChangeController(http.Controller):

    @http.route('/_odoo.sh/ip-change', auth='public')
    def ip_change(self, old=None, new=None):
        _logger.info("IP address changed from %s to %s", old, new)
        # Then perform whatever action required for your use case, e.g., update an
        # ir.config_parameter, send an email, contact an external firewall service's API, ...
        return 'ok'