کانتینرها¶
نمای کلی¶
هر ساخت در داخل کانتینر اختصاصی خود (کانتینر نامگذاریشده لینوکس) ایزوله شده است.
پایه یک سیستم اوبونتو است که در آن تمام وابستگیهای مورد نیاز Odoo و همچنین بستههای مفید رایج نصب شدهاند.
اگر پروژه شما به وابستگیهای اضافی پایتون یا نسخههای جدیدتر نیاز دارد، میتوانید یک فایل requirements.txt
در ریشه شاخههای خود تعریف کنید و آنها را فهرست کنید. پلتفرم مسئول نصب این وابستگیها در کانتینرهای شما خواهد بود. مستندات مشخصکنندههای نیازمندیهای pip میتواند به شما در نوشتن فایل requirements.txt
کمک کند. برای یک مثال عملی، فایل requirements.txt
مربوط به Odoo را بررسی کنید <https://github.com/odoo/odoo/blob/18.0/requirements.txt>`_.
فایلهای requirements.txt
زیرماژولها نیز در نظر گرفته میشوند. پلتفرم به دنبال فایلهای requirements.txt
در هر پوشهای که شامل ماژولهای Odoo باشد، میگردد: نه در خود پوشه ماژول، بلکه در پوشه والد آنها.
ساختار دایرکتوری¶
از آنجا که کانتینرها مبتنی بر اوبونتو هستند، ساختار دایرکتوری آنها از استاندارد سلسلهمراتب فایل سیستم لینوکس پیروی میکند. نمای کلی درخت فایل سیستم اوبونتو دایرکتوریهای اصلی را توضیح میدهد.
در اینجا دایرکتوریهای مربوط به 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 که منجر به تغییرات میشود (UPDATE, DELETE, ALTER, ...)، بهویژه برای پایگاه داده تولیدی خود.
مکانیزم تراکنش شبکه ایمنی شما در صورت اشتباه است. شما فقط باید تغییرات خود را بازگردانید تا پایگاه داده خود را به حالت قبلی برگردانید.
به عنوان مثال، ممکن است فراموش کنید شرط 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
با این حال، فراموش نکنید که پس از انجام این کار، تراکنش خود را یا تأیید (commit) کنید یا بازگردانید (rollback). تراکنشهای باز ممکن است رکوردهایی را در جداول شما قفل کنند و پایگاه داده در حال اجرای شما ممکن است منتظر آزاد شدن آنها بماند. این میتواند باعث شود که سرور به طور نامحدود متوقف شود.
علاوه بر این، در صورت امکان، ابتدا از پایگاههای داده مرحلهای خود برای آزمایش دستورات استفاده کنید. این کار یک لایه ایمنی اضافی به شما میدهد.
اجرای سرور اودو¶
شما میتوانید یک نمونه سرور 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 توضیح داده شدهاند.
شما میتوانید مسیر افزونههایی که 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 تفاوت زیادی با سایر برنامههای پایتون ندارد. این مقاله تنها ویژگیها و محدودیتهای پلتفرم Odoo.sh را توضیح میدهد و فرض میکند که شما قبلاً نحوه استفاده از اشکالزدا را میدانید.
توجه
اگر هنوز نمیدانید چگونه یک برنامه پایتون را اشکالزدایی کنید، دورههای مقدماتی متعددی وجود دارند که به راحتی میتوان آنها را در اینترنت پیدا کرد.
شما میتوانید از 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 Shell را اجرا کنید:
$ odoo-bin shell
در نهایت، از طریق شل اودو، میتوانید قطعه کد/تابع/متدی که میخواهید اشکالزدایی کنید را اجرا کنید.
