Preguntas técnicas más frecuentes

«Las acciones planificadas no se ejecutan en el momento exacto en que se esperaban»

En la plataforma de Odoo.sh, no podemos garantizar un tiempo de ejecución exacto para las acciones planificadas.

Esto se debe a que quizás haya varios clientes en el mismo servidor y debemos garantizar una repartición justa del servidor a cada uno. Por lo tanto, las acciones planificadas se llevan a cabo de manera algo distinta a como se haría en un servidor regular de Odoo y se ejecutan bajo una política de mayor esfuerzo.

Advertencia

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

¿Hay «mejores prácticas» respecto a las acciones planificadas?

Odoo.sh siempre limita el tiempo de ejecución de las acciones planificadas (*también conocidas como* crons). Por lo tanto, debe tener esto en cuenta cuando desarrolle sus propios crons.

Le aconsejamos lo siguiente:

  • Sus acciones planificadas deben trabajar en pequeños lotes de registros.

  • Sus acciones planificadas deben confirmar su trabajo después de procesar cada lote. De esta forma, si las interrumpe el límite de tiempo, no es necesario volver a empezar.

  • Sus acciones planificadas deben ser idempotentes. No deben causar efectos secundarios si se activan con una mayor frecuencia a la esperada.

¿Cómo puedo automatizar tareas cuando ocurre un cambio de dirección IP?

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 un parámetro de cadena de consulta (new), junto con la dirección IP anterior como un parámetro adicional (old).

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

Por motivos de seguridad, solo es posible acceder a la ruta /_odoo.sh/ip-change desde la plataforma y devuelve la respuesta 403 si intenta acceder por otros medios.

Este es un ejemplo de pseudo-implementació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'