کانتینرها

نمای کلی

هر ساخت در داخل کانتینر اختصاصی خود (کانتینر نام‌گذاری‌شده لینوکس) ایزوله شده است.

پایه یک سیستم اوبونتو است که در آن تمام وابستگی‌های مورد نیاز 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

در نهایت، از طریق شل اودو، می‌توانید قطعه کد/تابع/متدی که می‌خواهید اشکال‌زدایی کنید را اجرا کنید.

تصویر کنسول که اجرای ``pdb`` در یک شل Odoo.sh را نشان می‌دهد.