Întrebări Tehnice Frecvente

„Acțiunile programate nu rulează la ora exactă la care au fost așteptate”

Pe platforma Odoo.sh, nu putem garanta o oră exactă de rulare pentru acțiunile programate.

Acest lucru se datorează faptului că ar putea exista mai mulți clienți pe aceeași server, și trebuie să garanțiem o parte echitabilă a server-ului pentru orice client. Acțiunile programate sunt, prin urmare, implementate ușor diferit decât pe un server Odoo obișnuit, și sunt rulate pe o politică de „best effort”.

Atenționare

Nu așteptați ca nicio acțiune programată să fie rulată mai des de 5 min.

Există „best practices” cu privire la acțiunile programate?

Odoo.sh limitează întotdeauna timpul de execuție al acțiunilor programate (*aka* crons). Prin urmare, trebuie să aveți în vedere acest lucru când dezvoltați propriile crons.

Vă recomandăm să:

  • Acțiunile programate ar trebui să funcționeze pe mici loturi de înregistrări.

  • Acțiunile programate ar trebui să comită munca lor după procesarea fiecărui lot; în acest fel, dacă acestea sunt întrerupte de limita de timp, nu este nevoie să începeți din nou.

  • Acțiunile programate ar trebui să fie idempotente: nu trebuie să cauzeze efecte secundare dacă sunt lansate mai des decât este așteptat.

Cum pot automatiza sarcinile atunci când are loc o schimbare a adresei IP?

Odoo.sh notifică administratorii de proiect cu privire la modificările adresei IP. În plus, atunci când adresa IP a unei instanțe de producție se modifică, se face o cerere HTTP GET către calea /_odoo.sh/ip-change cu noua adresă IP inclusă ca parametru al șirului de interogări (new), împreună cu adresa IP anterioară ca parametru suplimentar (old).

Acest mecanism permite aplicarea unor acțiuni personalizate ca răspuns la schimbarea adresei IP (de exemplu, trimiterea unui e-mail, contactarea unui API firewall, configurarea obiectelor bazei de date etc.)

Din motive de securitate, ruta /_odoo.sh/ip-change este accesibilă doar intern de către platformă și returnează un răspuns 403 dacă este accesată prin orice alte mijloace.

Iată un exemplu de pseudoimplementare:

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'