容器¶
Overview¶
每个构建都在其自己的容器中隔离进行(Linux 命名空间容器)。
基础系统是一个 Ubuntu 系统,其中安装了 Odoo 所需的所有依赖项以及常用的实用软件包。
如果你的项目需要额外的 Python 依赖项,或者更新的版本,可以在分支根目录下定义一个 requirements.txt
文件来列出这些依赖项。平台会负责在你的容器中安装这些依赖项。pip 依赖规范 文档可以帮助你编写一个 requirements.txt
文件。要查看具体示例,请查看 Odoo 的 requirements.txt 文件。
子模块的 requirements.txt
文件也会被考虑在内。平台会在每个包含 Odoo 模块的文件夹中查找 requirements.txt
文件:不是在模块文件夹本身,而是在其父文件夹中。
目录结构¶
由于这些容器基于 Ubuntu,它们的目录结构遵循 Linux 文件系统层次标准。Ubuntu 的文件系统树概述 介绍了主要目录。
以下是 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 访问容器时,可以使用 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=>
Be careful ! Use transactions (BEGIN…COMMIT/ROLLBACK) for every sql statements leading to changes (UPDATE, DELETE, ALTER, …), especially for your production database.
交易机制是您在出现错误时的安全保障。您只需回滚您的更改,即可将数据库恢复到之前的状态。
例如,可能会出现你忘记设置你的 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 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
会在完成您要求的操作后立即关闭服务器实例。
更多选项的详细信息请参见 命令行界面文档。
你可以在日志文件(~/logs/odoo.log)中找到 Odoo.sh 用于运行你的服务器的插件路径。查找 “odoo: 插件路径”:
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 上调试构建与调试其他 Python 应用程序并没有太大区别。本文仅解释 Odoo.sh 平台的特定情况和限制,并假设您已经了解如何使用调试器。
注解
如果你还不知道如何调试 Python 应用程序,可以在互联网上找到多个易于理解的入门课程。
你可以使用 pdb
、pudb
或 ipdb
在 Odoo.sh 上调试你的代码。由于服务器是在 shell 外运行的,你无法直接从你的 Odoo 实例后端启动调试器,因为调试器需要一个 shell 来运行。
pdb 默认安装在每个容器中。
-
要做到这一点,您有两个选项:
临时(仅在当前构建中):
$ 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。
保存文件后,运行 Odoo Shell:
$ odoo-bin shell
Finally, via the Odoo Shell, you can trigger the piece of code/function/method you want to debug.
