Domande tecniche frequenti

«Le azioni programmate non vengono eseguite nel momento previsto»

Sulla piattaforma Odoo.sh, non possiamo garantire un tempo di esecuzione esatto per le azioni programmate.

Questo è dovuto al fatto che potrebbero esservi più clienti sullo stesso server e noi dobbiamo garantire una condivisione equa del server per ogni cliente. Le azioni programmate quindi vengono implementate in maniera leggermente diversa e gestite secondo la politica del miglior sforzo rispetto a quelle eseguite su server Odoo regolari.

Avvertimento

Non aspettarti che le azioni programmate vengano eseguite con un tempo ricorrente maggiore di ogni 5 minuti.

Esistono «buone pratiche» per le azioni programmate?

Odoo.sh limita sempre il tempo di esecuzione delle azioni programmate (*aka* crons). Pertanto, dovresti tenere questo a mente quando sviluppi i tuoi cron.

Ti consigliamo di:

  • applicare le azioni programmate su piccoli gruppi di record;

  • far in modo che le azioni programmate eseguano il commit del proprio lavoro dopo aver elaborato ogni gruppo. In questo modo, se vengono interrotte dal limite di tempo, non c’è bisogno di ricominciare da capo;

  • far sì che le azioni programmate siano idempotent: non devono causare effetti collaterali se vengono avviate più volte rispetto a quanto previsto.

How can I automate tasks when an IP address change occurs?

Odoo.sh notifies project administrators of IP address changes. Additionally, when the IP address of a production instance changes, an HTTP GET request is made to the path /_odoo.sh/ip-change with the new IP address included as a query string parameter (new), along with the previous IP address as an additional parameter (old).

This mechanism allows custom actions to be applied in response to the IP address change (e.g., sending an email, contacting a firewall API, configuring database objects, etc.)

For security reasons, the /_odoo.sh/ip-change route is accessible only internally by the platform itself and returns a 403 response if accessed through any other means.

Here is a pseudo-implementation example:

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'