คำถามทางเทคนิคที่พบบ่อย¶
"การดำเนินการตามกำหนดเวลาไม่ทำงานตามเวลาที่คาดไว้"¶
บนแพลตฟอร์ม 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'