कंटेनर¶
खास जानकारी¶
हर बिल्ड अपने खुद के कंटेनर (Linux namespaced container) के अंदर अलग-थलग होता है।
बेस एक Ubuntu सिस्टम है, जहां Odoo की सभी जरूरी डिपेंडेंसी के साथ-साथ आम उपयोगी पैकेज इंस्टॉल किए गए हैं।
यदि आपके प्रोजेक्ट को अतिरिक्त Python डिपेंडेंसी की आवश्यकता है, या ज़्यादा हाल की रिलीज़ की, तो आप अपनी ब्रांच के रूट में requirements.txt फ़ाइल को परिभाषित कर सकते हैं, जिसमें उन्हें लिस्ट किया गया हो। प्लेटफ़ॉर्म आपके कंटेनर में इन डिपेंडेंसी को इंस्टॉल करने का ध्यान रखेगा। pip requirements specifiers दस्तावेज़ आपको requirements.txt फ़ाइल लिखने में मदद कर सकता है। कंक्रीट उदाहरण के लिए, Odoo की requirements.txt फ़ाइल देखें।
सबमॉड्यूल की requirements.txt फ़ाइलों को भी ध्यान में रखा जाता है। प्लेटफ़ॉर्म हर उस फ़ोल्डर में requirements.txt फ़ाइल खोजता है जिसमें Odoo मॉड्यूल हों: मॉड्यूल फ़ोल्डर में नहीं, बल्कि उनके पेरेंट फ़ोल्डर में।
डायरेक्टरी स्ट्रक्चर¶
चूंकि कंटेनर Ubuntu बेस्ड हैं, इसलिए उनकी डायरेक्टरी स्ट्रक्चर linux Filesystem Hierarchy Standard को फ़ॉलो करती है। Ubuntu की filesystem tree की पूरी जानकारी मुख्य डायरेक्टरी समझाती है।
यहां 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=>
सावधान रहें! हर sql स्टेटमेंट के लिए जो बदलाव करें (UPDATE, DELETE, ALTER, ...), खासकर अपने प्रॉडक्शन डेटाबेस के लिए, ट्रांज़ैक्शन इस्तेमाल करें (BEGIN...COMMIT/ROLLBACK)।
ट्रांज़ैक्शन मैकेनिज़्म गलती की स्थिति में आपका सुरक्षा जाल है। आपको बस अपने बदलाव को रोलबैक करना है ताकि डेटाबेस को उसकी पिछली स्थिति में वापस लाया जा सके।
उदाहरण के लिए, ऐसा हो सकता है कि आप अपनी 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आपके द्वारा मांगे गए ऑपरेशन पूरे करने के बाद सर्वर इंस्टेंस को तुरंत शटडाउन कर देगा।
ज़्यादा ऑप्शन उपलब्ध हैं और CLI दस्तावेज़ में विस्तार से दिए गए हैं।
आप लॉग (~/logs/odoo.log) में Odoo.sh द्वारा आपके सर्वर को चलाने के लिए इस्तेमाल किया गया ऐडऑन पाथ पा सकते हैं। "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 प्लेटफ़ॉर्म की विशिष्टताओं और सीमाओं को समझाता है, और यह मानता है कि आप पहले से जानते हैं कि डीबगर का इस्तेमाल कैसे करना है।
टिप्पणी
अगर आप अभी तक नहीं जानते कि Python ऐप्लिकेशन को कैसे डीबग करना है, तो कई परिचयात्मक कोर्स हैं जो इंटरनेट पर आसानी से मिल सकते हैं।
आप Odoo.sh पर अपने कोड को डीबग करने के लिए pdb, pudb या ipdb का इस्तेमाल कर सकते हैं। चूंकि सर्वर शेल के बाहर चलाया जाता है, इसलिए आप अपने Odoo इंस्टेंस बैकएंड से सीधे डीबगर लॉन्च नहीं कर सकते क्योंकि डीबगर को ऑपरेट करने के लिए शेल की ज़रूरत होती है।
pdb हर कंटेनर में डिफ़ॉल्ट रूप से इंस्टॉल है।
अगर आप pudb या ipdb इस्तेमाल करना चाहते हैं तो आपको इसे पहले इंस्टॉल करना होगा।
ऐसा करने के लिए आपके पास दो विकल्प हैं:
अस्थायी (सिर्फ़ मौजूदा बिल्ड में):
$ pip install pudb --user
या
$ pip install ipdb --user
स्थायी: अपनी प्रोजेक्ट की
requirements.txtफ़ाइल मेंpudbयाipdbजोड़ें।
फिर उस कोड को बदलाव करें जहां आप डीबगर को ट्रिगर करना चाहते हैं और यह जोड़ें:
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
शर्त sys.__stdin__.isatty() एक हैक है जो पता लगाती है कि क्या आप Odoo को शेल से चला रहे हैं।
फ़ाइल सेव करें और फिर Odoo शेल चलाएं:
$ odoo-bin shell
अंत में, Odoo शेल के ज़रिए, आप उस कोड/फ़ंक्शन/मेथड को ट्रिगर कर सकते हैं जिसे आप डीबग करना चाहते हैं।