odoo18启动流程

odoo18启动流程

第一阶段:命令行解析与参数配置

执行 odoo-bin 命令

1.入口点 : odoo-bin (主程序是 odoo-bin,不是 odoo.py)

2.命令行参数解析

3.配置文件读取

4.创建按odoo.tools.config 单例

​ 所有配置被存储在一个全局 单例的config对象中.odoo的整个生命周期内都可以被访问

第二阶段: 预初始化和模块管理设置

基础准备工作

5.确定加载路径:

​ odoo.conf 文件中 --addons-path 参数,确定扫描的模块目录

6.预加载模块

​ 导入核心模块: base web

第三阶段: 服务器与数据库连接

7.初始化服务器对象:

​ 创建 odoo.service.server 模块中的全局 Server 对象。这个对象是 Odoo 服务器的核心管理器

8.设置数据库连接:

​ odoo.conf 文件中 db_host db_port db_name....

第四阶段: 模块加载与注册表构建

启动核心

9.加载模块图:

​ Odoo会扫描 addons-path 中的所有目录,识别有效的模块(包含 __ manifest__.py 的文件夹).

​ (每个新建模块下都会有一个 __ init__.py 和 __ __ manifest__.py 文件)

​ 然后,解析每个模块的 depends 清单,构建一个完整的模块依赖图.

10.初始化注册表:

Registry 是一个内存中的数据结构,存储了所有模型(Model)的元信息 字段 方法以及业务逻辑.

​ 初始化过程如下:

  • 对于每个数据库下,都有一个独立的 Registry

  • 系统按依赖顺序 加载所有需要加载的模块

  • 对于每个模块, Odoo都会:

    • 导入模型文件: 执行模块中的 models/__init__.py*.py 文件,将其中定义的模型类加载到内存

    • 构建模型: 对于每个模型, 收集其字段定义 方法 约束 继承等信息

    • 应用继承: 根据继承机制( _inherit, _inherits )合并和修改模型定义

      • 详细解析

        流程如下:

        扫描 addons_path 目录下的所有模块

        ​ 包括官方模块、自定义模块、企业版等

        读取每个模块的 manifest.py 文件

        ​ 获取模块名、依赖关系、数据文件列表

        构建模块图(Graph of Modules)

        ​ 按依赖排序(例如 sale 依赖 account,所以 account 先加载)

        依次加载模块:
        • 创建模型(ORM 映射)
        • 执行 pre_init_hook
        • 创建数据库表(如果不存在)
        • 导入数据文件(XML/CSV)按顺序:
          • security/ir.model.access.csv
          • data/*.xml
          • demo/*.xml(仅当启用演示数据)
          • 执行 post_init_hook
        • 标记模块为 installed 状态
  • 最终 , 一个完整的 包含所有模型及其关系的注册表被构建完成, 并缓存起来以供所有工作进程使用

11.触发模块安装/更新钩子:

  • 对于新安装的模块,会执行 @api.model_create_multi 等装饰器标记的初始化方法,以及 _init 方法(如果模型定义了它)。
  • 对于更新的模块,会运行在 __manifest__.py 中定义的 pre_init_hook, post_init_hook, uninstall_hook 等。

第五阶段: 启动服务 Workers

12.选择服务器模式:

  1. 启动 Cron Jobs

  2. 启动 RPC 和 Web 服务:

    第六阶段 :准备就绪

  3. 服务器准备就绪

posted @ 2025-10-10 10:26  柴郡猫zzz  阅读(6)  评论(0)    收藏  举报