容器¶
概述¶
每个构建版本都隔离在其自己的容器(Linux 命名空间容器)中。
基础是一个Ubuntu系统,其中安装了Odoo所有必需的依赖项以及常见的有用包。
If your project requires additional Python dependencies, or more recent releases,
you can define a requirements.txt
file in the root of your branches listing them.
The platform will take care to install these dependencies in your containers.
The pip requirements specifiers
documentation can help you write a requirements.txt
file.
To have a concrete example,
check out the requirements.txt file of Odoo.
自有模块的 requirements.txt
文件也被考虑在内。该平台在包含Odoo模块的每个文件夹中查找:file:`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 访问容器时,可以使用 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 服务器¶
您可以从容器 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”阻止加载所有模块的演示数据
“—在初始化后停止”将在服务器实例完成您请求的操作后立即将其关闭。
More options are available and detailed in the CLI documentation.
您可以在日志(~/logs/odoo.log)中找到 Odoo.sh 用于运行服务器的插件路径。查找“odoo: 插件路径”:
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']
Be careful, especially with your production database. Operations that you perform running this Odoo server instance are not isolated: Changes will be effective in the database. Always, make your tests in your staging databases.
在 Odoo.sh 中调试¶
调试 Odoo.sh 生成与另一个 Python 应用没有什么不同。本文仅介绍 Odoo.sh 平台的特性和限制,并假定您已经知道如何使用调试器。
注解
如果您还不知道如何调试Python应用程序,则可以在Internet上轻松找到多个入门课程。
您可以使用“pdb”,“pudb”或“ipdb”在 Odoo.sh 调试代码。由于服务器在 shell 外部运行,因此您无法直接从 Odoo 实例后端启动调试器,因为调试器需要一个 shell 才能运行。
“pdb <https://docs.python.org/3/library/pdb.html>”_ 默认安装在每个容器中。
如果你想使用`pudb <https://pypi.org/project/pudb/>`_或`ipdb <https://pypi.org/project/ipdb/>`_,你必须先安装它。
为此,您有两种选择:
临时(仅在当前版本中):
$ pip install pudb --user
或
$ pip install ipdb --user
永久:将“pudb”或“ipdb”添加到项目“要求.txt”文件中。
然后编辑要触发调试器的代码并添加以下内容:
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
条件:code:`sys.__stdin__.isatty()`是一个黑客,可以检测你是否从shell运行Odoo。
保存文件,然后运行 Odoo Shell:
$ odoo-bin shell
最后,*通过*Odoo Shell,您可以触发要调试的代码/函数/方法。