Advanced topics

This section covers advanced features of Odoo.sh related to containers, Git submodules, and scheduled actions.

الحاويات

Each build is isolated in its own container (Linux namespace container). The base is an Ubuntu-based system on which all of Odoo's required dependencies, as well as common, useful packages, are installed.

If your project requires additional Python dependencies or more recent releases, you can define a requirements.txt file at the root of your branches that lists them. The platform will ensure these dependencies are installed in your containers.

انظر أيضًا

ملاحظة

The requirements.txt files of submodules are also taken into account. The platform looks for such files in the parent folder of each folder containing an Odoo module.

بنية الدليل

As the containers are Ubuntu-based, their directory structure follows the Filesystem Hierarchy Standard.

The directories relevant to Odoo.sh are the following:

.
├── home
│    └── odoo
│         ├── backup.daily
│         ├── 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
│         └── 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
└── usr
     ├── lib
     │    └── pythonX.XX
     │         └── dist-packages       Python X.XX standard libraries
     ├── local
     │    └── lib
     │         └── pythonX.XX
     │              └── dist-packages  Python X.XX third-party libraries
     └── usr
          └── bin
               └── pythonX.X           Python X.XX executable

shell قاعدة البيانات

While accessing a container with the shell, you can access the database using the psql command.

odoo@odoo-master-1.odoo.sh:~$ psql
psql (16.9)
Type "help" for help.

odoo-master-1=>

تحذير

Always use transactions (e.g., BEGIN (...) COMMIT / ROLLBACK) when an SQL statement leads to changes (e.g., UPDATE, DELETE, ALTER, etc.) , especially for your production database. The transaction mechanism is your safety net in case of a mistake. You simply have to rollback your changes to revert your database to its previous state.

Do not forget to commit or roll back transactions. Open transactions may lock records in your tables, and a running database may wait for them to be released, causing a server to hang indefinitely.

In addition, use your staging databases to test your statements first. It gives you an extra safety net.

Example

You forgot to set your WHERE condition. In such a case, you can rollback to revert the unwanted change:

odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-master-1=> ROLLBACK;
ROLLBACK

Then, rewrite the statement and commit the change:

odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-master-1=> COMMIT;
COMMIT

تشغيل خادم أودو

You can start an Odoo server instance from a container shell. You won't be able to access it from the outside world with a web browser, but you can, for example:

  • استخدم Odoo shell:

    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
    

    نصيحة

    • يمنع الوسيط --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
    

انظر أيضًا

وثائق CLI

للعثور على مسار الوحدات الإضافية الذي يستخدمه Odoo.sh لتشغيل خادمك، ابحث عن "odoo: addons paths" في السجلات (~/logs/odoo.log).

2025-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.0
2025-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2025-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 ليست معزولة؛ ستنعكس التغييرات في قاعدة البيانات. تذكر دائمًا إجراء الاختبارات في قواعد بيانات الاختبار (staging) الخاصة بك.

تصحيح الأخطاء في Odoo.sh

ملاحظة

لا يختلف تصحيح أخطاء بناء Odoo.sh كثيرًا عن تصحيح أخطاء تطبيق Python آخر. لذلك، يهدف هذا القسم إلى تغطية خصائص وقيود منصة Odoo.sh، ويفترض أنك تعرف بالفعل كيفية استخدام أداة تصحيح الأخطاء (debugger).

يمكنك استخدام pdb أو pudb أو ipdb لتصحيح الأخطاء في الكود على Odoo.sh. بما أن الخادم يعمل خارج الصدفة (shell)، لا يمكنك تشغيل أداة تصحيح الأخطاء مباشرة من واجهة Odoo الخلفية، لأنها تتطلب صدفة (shell) للعمل.

pdb مثبت في كل حاوية.

نصيحة

لاستخدام pudb أو ipdb، من الضروري تثبيتهما إما:

  • بشكل دائم عن طريق إضافة pudb أو ipdb إلى ملف requirements.txt الخاص بمشروعك، أو

  • بشكل مؤقت (فقط في البناء الحالي) عن طريق تشغيل الأمر المناسب:

    pip install pudb --user
    
    pip install ipdb --user
    
  1. لتشغيل أداة تصحيح الأخطاء، أضف هذا إلى الكود الذي تريد تصحيحه:

    import sys
    if sys.__stdin__.isatty():
        import pdb; pdb.set_trace()
    

    ملاحظة

    الشرط sys.__stdin__.isatty() هو حل بديل لاكتشاف ما إذا كنت تشغل Odoo من صدفة (shell).

  2. بعد ذلك، احفظ الملف وشغّل واجهة Odoo shell:

    odoo-bin shell
    
  3. استخدم Odoo shell لتشغيل الكود الذي تريد تصحيحه.

    تشغيل pdb في صدفة Odoo.sh

التطبيقات الفرعية

تتيح لك Git submodules ربط المستودعات الخارجية مباشرة بمشروعك دون نسخ ولصق الكود، مما يبسّط عملية النشر عن طريق استنساخ التبعيات جنبًا إلى جنب مع الكود الأساسي لمشروعك. كما تحافظ على تحكم دقيق في الإصدارات من خلال اختيار الفروع المحددة وتثبيت مراجعات التزام معينة لتحديثها متى شئت.

على أودو.تيرابايت (Odoo.sh)، تكتشف المنصة الوحدات الفرعية تلقائيًا وتضيفها إلى مسار الوحدات لديك لتثبيت قاعدة البيانات، شريطة تكوين مفتاح نشر في إعدادات المشروع والمستودع عند دمج المستودعات الخاصة.

إضافة تطبيق فرعي

ملاحظة

لا يمكن حاليًا إضافة مستودعات خاصة باستخدام Odoo.sh. مع ذلك، يمكنك القيام بذلك باستخدام Git.

  1. من عرض الفروع في مشروع Odoo.sh الخاص بك، اختر الفرع الذي تريد إضافة وحدة فرعية إليه.

  2. في الزاوية اليمنى العلوية، انقر على وحدة فرعية، ثم تشغيل على Odoo.sh.

  3. في مربع الحوار، املأ الحقول التالية:

    • رابط URL للمستودع: رابط SSH الخاص بالمستودع

      نصيحة

      على GitHub، انقر على استنساخ، اختر SSH، ثم انسخ الرابط.

    • الفرع: الفرع المحدد الذي يجب استخدامه

    • المسار: المجلد الذي يجب إضافة الوحدة الفرعية إليه في فرعك

نصيحة

عند إضافة مستودع يحتوي على العديد من الوحدات، قد ترغب في تجاهل بعضها إذا تم تثبيت أي منها تلقائيًا. للقيام بذلك، أضف . كبادئة لمجلد الوحدة الفرعية (مثال: .folder). ستتجاهل المنصة هذا المجلد، ويمكنك اختيار الوحدات يدويًا عن طريق إنشاء روابط رمزية لها من مجلد آخر.

الإجراءات المجدولة

على منصة Odoo.sh، يتم تنفيذ الإجراءات المجدولة بطريقة مختلفة قليلاً عن خادم Odoo العادي، وتُشغَّل وفق مبدأ بذل أفضل جهد ممكن. ويعود ذلك إلى احتمال وجود عدة عملاء على نفس الخادم، حيث يُضمن لكل عميل حصة عادلة من موارد الخادم. لذلك، لا يمكن ضمان وقت تشغيل دقيق للإجراءات المجدولة.

مهم

لا تتوقع تشغيل أي إجراء مجدول أكثر من مرة كل خمس دقائق.

بما أن وقت تنفيذ الإجراءات المُجدولة محدود، يُنصح بالتأكد من أن الإجراءات المُجدولة الخاصة بك:

  • تعمل على دفعات صغيرة من السجلات.

  • تُثبّت عملها بعد معالجة كل دفعة، حتى لا تحتاج إلى البدء من جديد إذا تمت مقاطعتها بسبب انتهاء الوقت المحدد.

  • قابلة للتكرار دون تأثير جانبي، أي أنها يجب ألا تُسبب أي آثار جانبية إذا تم تشغيلها أكثر من المتوقع.