कंटेनर

खास जानकारी

हर बिल्ड अपने खुद के कंटेनर (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 --stop-after-init
  • मॉड्यूल अपडेट करें,

$  odoo-bin -u sale --stop-after-init
  • मॉड्यूल के लिए टेस्ट चलाएं,

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

उपरोक्त कमांड में, आर्ग्युमेंट:

  • --stop-after-init आपके द्वारा मांगे गए ऑपरेशन पूरे करने के बाद सर्वर इंस्टेंस को तुरंत शटडाउन कर देगा।

ज़्यादा ऑप्शन उपलब्ध हैं और CLI दस्तावेज़ में विस्तार से दिए गए हैं।

आप लॉग (~/logs/odoo.log) में Odoo.sh द्वारा आपके सर्वर को चलाने के लिए इस्तेमाल किया गया ऐडऑन पाथ पा सकते हैं। "odoo: addons paths" खोजें:

2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 19.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/19.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 शेल के ज़रिए, आप उस कोड/फ़ंक्शन/मेथड को ट्रिगर कर सकते हैं जिसे आप डीबग करना चाहते हैं।

कंसोल स्क्रीनशॉट जो Odoo.sh शेल में चल रहे ``pdb`` को दिखाता है।