容器?

概覽?

每個構建都在自己的容器中進行隔離(Linux 命名空間容器)。

基礎系統是Ubuntu,安裝了Odoo所需的所有依賴項以及常用的有用軟件包。

如果您的項目需要額外的Python依賴項或更新的版本,您可以在分支的根目錄中定義一個 requirements.txt 文件列出它們。平臺將負責在您的容器中安裝這些依賴項。 pip要求說明符<https://pip.pypa.io/en/stable/reference/pip_install/#requirement-specifiers>`_文檔可以幫助您編寫 :file:`requirements.txt 文件。要獲得一個具體的示例,請查看 `Odoo的requirements.txt文件<https://github.com/odoo/odoo/blob/16.0/requirements.txt>`_。

子模塊的 requirements.txt 文件也會被考慮在內。平臺會在包含Odoo模塊的每個文件夾中查找 requirements.txt 文件,而不是在模塊文件夾本身中查找,而是在它們的父文件夾中查找。

目錄結構?

由于容器是基于Ubuntu的,它們的目錄結構遵循Linux文件系統層次結構標準。 `Ubuntu文件系統樹概述<https://help.ubuntu.com/community/LinuxFilesystemTreeOverview#Main_directories>`_解釋了主要目錄。

以下是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運行。

數據庫 shell?

在使用 shell 訪問容器時,您可以使用 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服務器?

您可以從容器 shell 中啟動 Odoo 服務器實例。您無法通過瀏覽器從外部訪問它,但您可以例如:

  • 使用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
  • 更新模塊,

$  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 16.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/16.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應用程序,可以在互聯網上輕松找到多個入門課程。

您可以使用 pdb 、 pudbipdb 在 Odoo.sh 上調試您的代碼。由于服務器在外部運行,因此您無法直接從 Odoo 實例后端啟動調試器,因為調試器需要一個 shell 來操作。

  • pdb 在每個容器中都已默認安裝。

  • 如果您想使用 pudbipdb,您需要先安裝它們。

    要這樣做,您有兩個選項:

    • 臨時的(僅在當前構建中):

      $  pip install pudb --user
      

      或者

      $  pip install ipdb --user
      
    • permanent: 在您的項目 requirements.txt 文件中添加 pudbipdb 。

然后編輯您想要觸發調試器的代碼,并添加以下內容:

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

條件 sys.__stdin__.isatty() 是一種 hack,用于檢測您是否從 shell 中運行 Odoo。

保存文件,然后運行Odoo Shell:

$ odoo-bin shell

最后, 通過 Odoo Shell,您可以觸發您想要調試的代碼/函數/方法。

在Odoo.sh shell中運行 ``pdb`` 的控制臺截圖。