Odoo 如何用 deploy 命令把本地模块打包成 zip 上传并安装到远程实例

Odoo 如何用 deploy 命令把本地模块打包成 zip 上传并安装到远程实例 Odoo 如何用 deploy 命令把本地模块打包成 zip 上传并安装到远程实例【免费下载链接】odooOdoo. Open Source Apps To Grow Your Business.项目地址: https://gitcode.com/GitHub_Trending/od/odoo当你有一个只包含数据、视图和静态资源的小型 Odoo 模块想装到一台不在本地的 Odoo 实例上时不需要把代码目录复制到服务器、改addons_path再重启。Odoo 自带的deploy命令行命令会做三件事把本地模块目录打包成 zip、带登录凭据把 zip 上传到目标实例、由实例端自动解包并安装该模块。整个流程在 部署命令实现 中服务端对应逻辑在 上传接口 里。本文按实际执行顺序说明前置条件、命令用法、服务端约束和结果判断。deploy 命令内部做了什么理解流程有助于判断报错出在哪一环deploy.py 的执行链是打包zip_module()把模块目录里的所有文件写入一个临时 zip每个文件在包内的路径是相对于模块的上级目录的因此 zip 顶层会是一个以模块名命名的目录如my_module/__manifest__.py。路径不是目录时会抛出Could not find module directory %s。上传完成后这个临时 zip 会被删除。登录定位数据库先向{url}/web/login?db{db}发起 GET 请求把目标数据库写入会话。上传向{url}/base_import_module/login_uploadPOST把 zip 作为mod_file文件字段并附带login、password、db、force字段。服务端鉴权通过后调用_import_zipfile()完成安装见 ir_module.py。前置条件目标实例已安装base_import_module。该模块auto_install: True且依赖web见manifest.py常规 web 实例会自动带上。如果实例上没有它或版本过旧命令会收到 404 并报错The server url does not have the base_import_module installed or is not up-to-date.使用管理员账号且该账号未启用 MFA。服务端接口用密码登录代码中明确request.env.uid is None in case of MFA此时会抛出Only administrators can upload a module非管理员同样得到此错误。本地运行odoo-bin的环境已具备依赖。deploy模块直接import requestsrequests在 requirements.txt 中是固定版本的依赖Python 3.11 为 2.25.1 3.11 为 2.31.0随 Odoo 的依赖一起安装即可。命令格式与参数命令行帮助信息command.py 中命令的标准形式为odoo-bin [--addons-pathPATH,...] deploy对应的参数如下./odoo-bin deploy path [url] [--db DB] [--login LOGIN] [--password PASSWORD] [--verify-ssl] [--force]参数说明path必填模块目录路径Path of the module to deploy必须是指向模块根目录本身不是 addons 父目录url可选目标实例地址默认http://localhost:8069若不以http://或https://开头命令会自动补上https://前缀--dbDatabase to use if server does not use db-filter.服务器未配置 db-filter 时必须用它指定数据库--login登录名默认admin--password密码默认admin--verify-ssl校验 SSL 证书不加此参数时命令会把会话的verify设为False即默认不校验证书--forceForce init even if module is already installed. (will updatenoupdate\1\records)对已安装模块强制重新初始化执行示例下面示例中./my_module是本机的模块根目录http://odoo.example.com是远程实例地址mydb是目标数据库密码按实际账号替换./odoo-bin deploy ./my_module http://odoo.example.com \ --db mydb --login admin --password 你的admin密码若实例启用了 HTTPS 且证书自签、不需要校验可以加--verify-ssl与否按实际需要选择向已装过该模块的实例重新初始化时加--force。命令执行时先打印Zipping module directory...和Uploading module file...随后输出服务端返回的响应文本。服务端对 zip 的约束上传后服务端 _import_zipfile 会按以下规则处理不符合时直接报错只接受 zip 文件且只有管理员可触发安装Only administrators can install data modules.。zip 内任何单个文件超过 100 MBMAX_FILE_SIZE 100 * 1024 * 1024会报File %s exceed maximum allowed file size。manifest 文件必须位于 zip 的第二层即模块名/目录下代码判断file.filename.count(/) 1且文件名属于MANIFEST_NAMES。deploy打包时天然生成这种结构不要手动改包内路径。实际导入的是 manifest 中data、init_xml、update_xml声明的.xml、.csv、.sql文件以及static/目录和i18n/下的.po文件。不会导入 demo 数据——deploy走的上传接口调用_import_zipfile时未启用with_demo。zip 里含多个模块时会按 manifest 的depends做拓扑排序逐个安装某个目录找不到 manifest 时报No manifest found in modules. Cant import the zip file.。单个模块导入失败时报Error while importing module module.并附带完整的 Python traceback可按其中的数据错误定位修复。结果验证成功时命令不抛异常打包与上传的两条进度提示后服务端响应体为空接口返回_import_zipfile()结果元组的第一个元素即空字符串不会打印额外内容。真正的确认要去实例端该模块会以已安装状态出现在实例的应用列表设置 → 应用中数据、视图和静态资源随之生效。失败时表现为以下几类输出均可在 deploy.py 和 controller 中对应到来源现象含义ERROR: The server url does not have the base_import_module installed or is not up-to-date.实例未安装该模块或版本过旧升级实例后重试Could not find module directory path传入的path不是目录检查是否误传了 addons 父目录500 响应Only administrators can upload a module账号不是管理员或账号启用了 MFA密码登录拿不到有效 uid换用未启用 MFA 的管理员账号500 响应Could not select database ...会话里没有定位到数据库服务器未用 db-filter 时补上--db500 响应No manifest found in .../Error while importing module ...zip 结构或模块数据本身的问题按报错中给出的 traceback 修改模块限制与边界该命令只负责打包、上传和安装不会在目标服务器上保留模块源码目录导入的模块以ir.module.module记录形式存在于数据库里。demo 数据不会随deploy上传导入接口未启用with_demo如需 demo只能在实例端另行处理。默认不校验 SSL 证书对安全要求高的环境应显式加--verify-ssl。临时 zip 由命令在本地系统临时目录创建并在上传结束后删除不需要手工清理。相关源码入口deploy 命令、上传接口、zip 安装实现、命令注册机制。【免费下载链接】odooOdoo. Open Source Apps To Grow Your Business.项目地址: https://gitcode.com/GitHub_Trending/od/odoo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考