คอนเทนเนอร์

ภาพรวม

แต่ละบิลด์จะถูกแยกออกจากคอนเทนเนอร์ของตัวเอง (คอนเทนเนอร์เนมสเปซ Linux)

ระบบพื้นฐานคือระบบ Ubuntu ซึ่งมีการติดตั้งการพึ่งพาที่จำเป็นทั้งหมดของ Odoo รวมถึงแพ็คเกจที่เป็นประโยชน์ทั่วไปไว้ด้วย

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

ไฟล์ requirements.txt ของโมดูลย่อยจะถูกนำมาพิจารณาด้วยเช่นกัน แพลตฟอร์มจะค้นหาไฟล์ requirements.txt ในแต่ละโฟลเดอร์ที่มีโมดูล Odoo: ไม่ได้อยู่ในโฟลเดอร์โมดูล แต่อยู่ในโฟลเดอร์หลัก

โครงสร้างไดเร็กทอรี

เนื่องจากคอนเทนเนอร์ใช้ Ubuntu โครงสร้างไดเร็กทอรีจึงเป็นไปตามมาตรฐานลำดับชั้นของระบบไฟล์ linux ภาพรวมแผนผังระบบไฟล์ของ Ubuntu อธิบายไดเรกทอรีหลัก

นี่คือไดเร็กทอรีที่เกี่ยวข้องของ Odoo.sh:

.
├── home
│    └── odoo
│         ├── src
│         │    ├── odoo                Odoo Community source code
│         │    │    └── odoo-bin       Odoo server executable
│         │    ├── enterprise          Odoo Enterprise source code
│         │    ├── themes              Odoo Themes source code
│         │    └── user                Your repository branch source code
│         ├── data
│         │    ├── filestore           database attachments, as well as the files of binary fields
│         │    └── sessions            visitors and users sessions
│         └── logs
│              ├── install.log         Database installation logs
│              ├── odoo.log            Running server logs
│              ├── update.log          Database updates logs
│              └── pip.log             Python packages installation logs
└── usr
     ├── lib
     │    ├── python2.7
     │         └── dist-packages       Python 2.7 standard libraries
     │    ├── python3
     │         └── dist-packages       Python 3 standard libraries
     │    └── python3.5
     │         └── dist-packages       Python 3.5 standard libraries
     ├── local
     │    └── lib
     │         ├── python2.7
     │         │    └── dist-packages  Python 2.7 third-party libraries
     │         └── python3.5
     │              └── dist-packages  Python 3.5 third-party libraries
     └── usr
          └── bin
               ├── python2.7           Python 2.7 executable
               └── python3.5           Python 3.5 executable

มีการติดตั้ง Python 2.7 และ 3.5 ไว้ในคอนเทนเนอร์ อย่างไรก็ตาม:

  • หากโปรเจ็กต์ของคุณได้รับการกำหนดค่าให้ใช้ Odoo 10.0 เซิร์ฟเวอร์ Odoo จะทำงานด้วย Python 2.7

  • หากโปรเจ็กต์ของคุณได้รับการกำหนดค่าให้ใช้ Odoo 11.0 หรือสูงกว่า เซิร์ฟเวอร์ Odoo จะทำงานด้วย Python 3.5

เชลล์ฐานข้อมูล

ขณะเข้าถึงคอนเทนเนอร์ด้วยเชลล์ คุณสามารถเข้าถึงฐานข้อมูลได้โดยใช้ psql

odoo@odoo-addons-master-1.odoo.sh:~$ psql
psql (9.5.2, server 9.5.11)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

odoo-addons-master-1=>

ระวัง ! ใช้ธุรกรรม (BEGIN...COMMIT/ROLLBACK) สำหรับทุกๆ sql * คำสั่งที่นำไปสู่การเปลี่ยนแปลง (*อัปเดต, ลบ, แก้ไข, ...) โดยเฉพาะอย่างยิ่งสำหรับฐานข้อมูลการผลิตของคุณ

กลไกการทำธุรกรรมคือความปลอดภัยของคุณในกรณีที่เกิดข้อผิดพลาด คุณเพียงแค่ต้องย้อนกลับการเปลี่ยนแปลงเพื่อเปลี่ยนฐานข้อมูลของคุณกลับเป็นสถานะก่อนหน้า

ตัวอย่างเช่น อาจเกิดขึ้นได้ว่าคุณลืมตั้งเงื่อนไข WHERE ของคุณ

odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK

ในกรณีเช่นนี้ คุณสามารถย้อนกลับเพื่อคืนค่าการเปลี่ยนแปลงที่ไม่ต้องการที่คุณเพิ่งทำผิดพลาด และเขียนคำสั่งใหม่:

odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-addons-master-1=> COMMIT;
COMMIT

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

นอกจากนี้ หากเป็นไปได้ ให้ใช้ฐานข้อมูลชั่วคราวเพื่อทดสอบคำสั่งของคุณก่อน มันช่วยเพิ่มความปลอดภัยให้กับคุณ

เรียกใช้เซิร์ฟเวอร์ Odoo

คุณสามารถเริ่มต้นอินสแตนซ์เซิร์ฟเวอร์ Odoo ได้จากคอนเทนเนอร์เชลล์ คุณจะไม่สามารถเข้าถึงได้จากโลกภายนอกด้วยเบราว์เซอร์ แต่คุณสามารถทำได้เช่น:

  • ใช้เชลล์ Odoo

$  odoo-bin shell
>>> partner = env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1)
>>> partner.name
'ASUSTeK'
>>> partner.name = 'Odoo'
>>> env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1).name
'Odoo'
  • ติดตั้งโมดูล

$  odoo-bin -i sale --without-demo=all --stop-after-init
  • อัปเดตโมดูล

$  odoo-bin -u sale --stop-after-init
  • ทำการทดสอบสำหรับโมดูล

$  odoo-bin -i sale --test-enable --log-level=test --stop-after-init

ในคำสั่งข้างต้น อาร์กิวเมนต์:

  • --without-demo=all ป้องกันไม่ให้ข้อมูลสาธิตถูกโหลดสำหรับโมดูลทั้งหมด

  • --stop-after-init จะปิดอินสแตนซ์เซิร์ฟเวอร์ทันทีหลังจากที่ดำเนินการตามที่คุณถามเสร็จสิ้น

มีตัวเลือกเพิ่มเติมและมีรายละเอียดอยู่ใน:doc:เอกสาร  CLI </developer/reference/cli>.

คุณสามารถค้นหาเส้นทางส่วนเสริมที่ Odoo.sh เพื่อเรียกใช้เซิร์ฟเวอร์ของคุณได้ในบันทึก (~/logs/odoo.log) มองหา "odoo: addons paths":

2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.0
2018-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2018-02-19 10:51:39,268 4 INFO ? odoo: addons paths: ['/home/odoo/data/addons/18.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']

ระวัง โดยเฉพาะกับฐานข้อมูลการผลิตของคุณ การดำเนินการที่คุณดำเนินการเรียกใช้อินสแตนซ์เซิร์ฟเวอร์ Odoo นี้ไม่ได้แยกจากกัน: การเปลี่ยนแปลงจะมีผลในฐานข้อมูล ทำการทดสอบในฐานข้อมูลการแสดงละครของคุณเสมอ

การดีบักใน Odoo.sh

การดีบักบิลด์ Odoo.sh ไม่ได้แตกต่างจากแอป Python อื่น บทความนี้จะอธิบายเฉพาะข้อมูลเฉพาะและข้อจำกัดของแพลตฟอร์ม Odoo.sh และถือว่าคุณรู้วิธีใช้ดีบักเกอร์อยู่แล้ว

Note

หากคุณยังไม่ทราบวิธีการดีบักแอปพลิเคชัน Python มีหลักสูตรเบื้องต้นหลายหลักสูตรที่สามารถพบได้ง่ายบนอินเทอร์เน็ต

คุณสามารถใช้ pdb, pudb หรือ ipdb เพื่อดีบักโค้ดของคุณบน Odoo.sh เนื่องจากเซิร์ฟเวอร์ทำงานนอกเชลล์ คุณจะไม่สามารถเปิดใช้ดีบักเกอร์ได้โดยตรงจากแบ็กเอนด์อินสแตนซ์ Odoo ของคุณ เนื่องจากดีบักเกอร์ต้องใช้เชลล์เพื่อดำเนินการ

  • pdb ได้รับการติดตั้งเป็นค่าเริ่มต้นในทุกคอนเทนเนอร์

  • หากคุณต้องการใช้ pudb หรือ ipdb คุณต้องติดตั้งก่อน

    โดยคุณมีสองทางเลือก:

    • ชั่วคราว (เฉพาะในรุ่นปัจจุบัน):

      $  pip install pudb --user
      

      หรือ

      $  pip install ipdb --user
      
    • ถาวร: เพิ่ม pudb หรือ ipdb ลงในไฟล์ requirements.txt ของโปรเจ็กต์ของคุณ

จากนั้นแก้ไขโค้ดที่คุณต้องการเริ่มต้นดีบักเกอร์และเพิ่มสิ่งนี้:

import sys
if sys.__stdin__.isatty():
    import pdb; pdb.set_trace()

เงื่อนไข sys.__stdin__.isatty() คือการแฮ็กที่จะตรวจจับว่าคุณเรียกใช้ Odoo จากเชลล์หรือไม่

บันทึกไฟล์แล้วเรียกใช้เชลล์ Odoo:

$ odoo-bin shell

สุดท้ายนี้ ผ่าน เชลล์ Odoo คุณสามารถเริ่มส่วนของโค้ด/ฟังก์ชัน/วิธีการที่คุณต้องการแก้ไขได้

ภาพหน้าจอคอนโซลแสดง ``pdb`` ที่ทำงานอยู่ในเชลล์ Odoo.sh