คำถามทางเทคนิคที่พบบ่อย

"การดำเนินการตามกำหนดเวลาไม่ทำงานตามเวลาที่คาดไว้"

บนแพลตฟอร์ม Odoo.sh เราไม่สามารถรับประกันเวลาการทำงานที่แน่นอนสำหรับการดำเนินการตามกำหนดการได้

นี่เป็นเพราะความจริงที่ว่าอาจมีลูกค้าหลายรายบนเซิร์ฟเวอร์เดียวกัน และเราต้องรับประกันส่วนแบ่งที่ยุติธรรมของเซิร์ฟเวอร์สำหรับลูกค้าทุกคน การดำเนินการตามกำหนดการจึงถูกนำมาใช้แตกต่างไปจากเซิร์ฟเวอร์ Odoo ทั่วไปเล็กน้อย และดำเนินการตามนโยบายด้วย ความพยายามอย่างเต็มที่

Warning

โปรดอย่าคาดหวังว่าการดำเนินการที่กำหนดเวลาไว้จะดำเนินการบ่อยกว่าทุกๆ 5 นาที

มี "แนวทางปฏิบัติที่ดีที่สุด" เกี่ยวกับการดำเนินการตามกำหนดการหรือไม่

Odoo.sh จะจำกัดเวลาการดำเนินการของการดำเนินการตามกำหนดการเสมอ (*หรือ* crons) ดังนั้น คุณต้องคำนึงถึงข้อเท็จจริงนี้เมื่อพัฒนา cron ของคุณเอง

เราแนะนำว่า:

  • การดำเนินการตามกำหนดการของคุณควรทำงานกับบันทึกเป็นชุดเล็กๆ

  • การดำเนินการตามกำหนดการของคุณควรดำเนินการงานหลังจากประมวลผลแต่ละชุด ด้วยวิธีนี้ หากถูกขัดจังหวะด้วยเวลาที่กำหนด ก็ไม่จำเป็นต้องเริ่มต้นใหม่

  • การดำเนินการที่กำหนดเวลาไว้ของคุณควรเป็น idempotent: การดำเนินการดังกล่าวจะต้องไม่ก่อให้เกิดผลข้างเคียงหากเริ่มต้นบ่อยกว่าที่คาดไว้

ฉันจะทำให้งานเป็นอัตโนมัติได้อย่างไรเมื่อมีการเปลี่ยนแปลงที่อยู่ IP?

Odoo.sh แจ้งให้ผู้ดูแลระบบโครงการทราบเกี่ยวกับการเปลี่ยนแปลงที่อยู่ IP นอกจากนี้ เมื่อที่อยู่ IP ของอินสแตนซ์การใช้งานจริงมีการเปลี่ยนแปลง จะมีการส่งคำขอ HTTP GET ไปยังเส้นทาง /_odoo.sh/ip-change โดยรวมที่อยู่ IP ใหม่เป็นพารามิเตอร์สตริงแบบสอบถาม (ใหม่) พร้อมกับที่อยู่ IP ก่อนหน้านี้เป็นพารามิเตอร์เพิ่มเติม (เก่า)

กลไกนี้ช่วยให้สามารถนำการดำเนินการแบบกำหนดเองมาใช้เพื่อตอบสนองต่อการเปลี่ยนแปลงที่อยู่ IP ได้ (เช่น การส่งอีเมล การติดต่อ API ไฟร์วอลล์ การกำหนดค่าวัตถุฐานข้อมูล ฯลฯ)

ด้วยเหตุผลด้านความปลอดภัย เส้นทาง /_odoo.sh/ip-change จะสามารถเข้าถึงได้จากภายในแพลตฟอร์มเท่านั้น และจะส่งกลับการตอบสนอง 403 หากเข้าถึงผ่านวิธีการอื่น

นี่คือตัวอย่างการนำไปปฏิบัติแบบหลอก:

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'