容器¶
概述¶
每个构建都在自己的容器中进行隔离(Linux 命名空间容器)。
基础系统是Ubuntu,安装了Odoo所需的所有依赖项以及常用的有用软件包。
如果你的项目需要额外的 Python 依赖项,或更新的版本,你可以在分支的根目录下定义一个 requirements.txt
文件来列出它们。平台将会负责在你的容器中安装这些依赖项。pip 需求说明符 文档可以帮助你编写 requirements.txt
文件。要查看一个具体的示例,请参考 Odoo 的 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=>
请注意! 使用事务 (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
然而,在完成操作后,请不要忘记提交或回滚您的事务。未提交的事务可能会锁定您表中的记录,导致您的数据库运行时等待这些记录被释放。这可能会导致服务器无限期地挂起。
此外,如果可能的话,请使用您的暂存数据库先测试您的语句。这将为您提供额外的安全保障。
运行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
prevents demo data to be loaded for all modules--stop-after-init
will immediately shutdown the server instance after it completed the operations you asked.
更多选项可在 CLI 文档 中找到并详细了解。
您可以在日志中(~/logs/odoo.log)找到Odoo.sh用于运行服务器的插件路径。请查找”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构建与调试其他Python应用程序并没有太大的区别。本文仅解释了Odoo.sh平台的特殊性和限制,并假定您已经知道如何使用调试器。
注解
如果您还不知道如何调试Python应用程序,可以在互联网上轻松找到多个入门课程。
您可以使用 pdb
、 pudb
或 ipdb
在 Odoo.sh 上调试您的代码。由于服务器在 外部运行,您无法直接从您的 Odoo 实例后端启动调试器,因为调试器需要一个 shell 来操作。
pdb is installed by default in every container.
如果你想使用 pudb 或者 ipdb,你需要在之前安装它。
要这样做,您有两个选项:
临时的(仅在当前构建中):
$ pip install pudb --user
or
$ pip install ipdb --user
permanent: 在您的项目
requirements.txt
文件中添加pudb
或ipdb
。
然后编辑您想要触发调试器的代码,并添加以下内容:
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
条件 sys.__stdin__.isatty()
是一个检测你是否从 shell 中运行 Odoo 的 hack。
保存文件,然后运行Odoo Shell:
$ odoo-bin shell
最后, 通过 Odoo Shell,您可以触发您想要调试的代码/函数/方法。