Published on

Odoo 源码分析 启动和加载

Authors

我是最早在 2015 年的时候接触 Odoo,那个时候还只是停留在简单使用的阶段,当时下载了 Bitnami 封装好的安装包,整个过程非常简单。给我印象最深的是 Odoo 有众多模块,可以按需安装,非常方便。

今年公司使用 Odoo 作为 WMS 系统,实施期间遇到了一些问题,因此我深入研究了 Odoo 的源码。现在,我可以在这里分享一下我的一些见解。我打算写一个系列的文章,具体写几篇还没想好。至于版本,就用目前最新的 12.0。


今天先从启动和加载说起。

首先,GitHub 上取一份代码:

git clone https://github.com/odoo/odoo.git
git checkout 12.0

可以先看一下目录结构

$ tree -L 1
.
├── CONTRIBUTING.md
├── COPYRIGHT
├── LICENSE
├── MANIFEST.in
├── README.md
├── addons
├── debian
├── doc
├── odoo
├── odoo-bin
├── requirements.txt
├── setup
├── setup.cfg
└── setup.py

6 directories, 9 files

项目提供了安装脚本 setup.py,执行安装脚本会自动安装所有依赖,也可以不通过 setup.py 安装,在安装好 requirements.txt 的依赖后直接通过 odoo-bin 运行,两种方式效果是一样的。我一般会直接通过 odoo-bin 运行项目,方便管理。

启动的过程

可以先看一下 odoo-bin 这个脚本的内容:

#!/usr/bin/env python3

# set server timezone in UTC before time module imported
__import__('os').environ['TZ'] = 'UTC'
import odoo

if __name__ == "__main__":
    odoo.cli.main()

Odoo 在启动的时候会时间设置为 UTC 时间(为了保证一致性,存储成 UTC 时间是一种好的实践),也就是说在 Odoo 的内部所有时间都存储成 UTC 时间,页面上显示的时间是根据本地时区转换后的时间。


参考资料:

Is it always a good idea to store time in UTC or is this the case where storing in local time is better?