คอนเทนเนอร์¶
ภาพรวม¶
แต่ละบิลด์จะถูกแยกออกจากคอนเทนเนอร์ของตัวเอง (คอนเทนเนอร์เนมสเปซ 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 คุณสามารถเริ่มส่วนของโค้ด/ฟังก์ชัน/วิธีการที่คุณต้องการแก้ไขได้
