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.
In che modo è possibile automatizzare le attività quando viene modificato un indirizzo IP?¶
Odoo.sh notifica gli amministratori del progetto sul cambiamento dell’indirizzo IP. In aggiunta, quando l’indirizzo IP di un’istanza di produzione cambia, viene fatta una richiesta HTTP di tipo GET
al percorso /_odoo.sh/ip-change
con il nuovo indirizzo IP incluso come parametro della stringa di query (new
), insieme con l’indirizzo IP precedente come parametro aggiuntivo (old
).
Il meccanismo permette di applicare azioni personalizzate in risposta al cambiamento dell’indirizzo IP (ad es. inviare e-mail, contattare un firewall API, configurare gli oggetti di un database, ecc.)
Per motivi di sicurezza, il percorso /_odoo.sh/ip-change
è accessibile solo internamente dalla piattaforma stessa e restituisce la risposta 403` se l’accesso viene effettuato con altri mezzi.
Di seguito un esempio di pseudo-implementazione:
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'