You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生产库字段不存在致模块更新失败,如何通过Termius解决?

Odoo生产环境模块更新失败(字段不存在+Internal Server Error)解决指南

问题背景

在res.users继承模型中新增了布尔字段is_admin_user,本地环境(Terminal/Pycharm)可正常处理字段不存在问题、完成模块更新,但通过Termius操作生产环境时,更新模块后数据库离线,触发Internal Server Error,无法完成字段同步。

关键排查与解决步骤

1. 定位具体错误日志

生产环境的泛错误提示无实际排查价值,必须查看Odoo详细日志:

# 替换为你的Odoo日志实际路径
tail -n 100 /var/log/odoo/odoo.log
# 更新模块时实时跟踪日志
tail -f /var/log/odoo/odoo.log

重点关注与is_admin_user字段、res_users表相关的错误,比如数据库权限不足、表锁、字段创建失败等。

2. 手动执行带调试日志的模块升级

通过Termius登录生产服务器,切换到Odoo运行用户后,执行指定模块的升级命令(开启调试日志便于定位问题):

# 切换到Odoo运行用户(示例为odoo)
sudo su - odoo
# 替换YOUR_DB_NAME为生产库名,YOUR_MODULE_NAME为你的模块名
odoo-bin -d YOUR_DB_NAME --update YOUR_MODULE_NAME --log-level debug

如果遇到数据库锁问题,先清理异常连接:

# 查看PostgreSQL活跃连接
psql -d YOUR_DB_NAME -c "SELECT pid, query FROM pg_stat_activity WHERE state = 'active';"
# 杀掉锁表进程(替换PID为对应进程ID)
psql -d YOUR_DB_NAME -c "SELECT pg_terminate_backend(PID);"

3. 修复权限问题

  • 确保Odoo用户对模块目录有读写权限:
chown -R odoo:odoo /path/to/your/custom/module
chmod -R 755 /path/to/your/custom/module
  • 确保PostgreSQL用户拥有生产库的完整权限:
psql -d YOUR_DB_NAME -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO odoo;"
psql -d YOUR_DB_NAME -c "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO odoo;"

4. 优化代码避免潜在异常

你的代码存在冗余逻辑,可能在生产环境触发未知问题,优化后:

class ResUserInherit(models.Model):
    _inherit = 'res.users'

    user_signature = fields.Binary(string="Signature")
    user_stamp = fields.Binary(string="Stamp")
    is_admin_user = fields.Boolean(string='Is Admin', default=False, readonly=False)

    def signature_domain(self):
        return [('company_id','=',self.env.company.id)]

    @api.onchange('company_id')
    def get_default_admin(self):
        admin_group = self.env['res.groups'].sudo().search([('name', '=ilike', 'Admin Power')])
        self.is_admin_user = self.env.user in admin_group.users

优化点:

  • 简化用户组判断逻辑,去掉冗余循环
  • 明确声明readonly=False(避免环境差异导致的默认值异常)
  • 直接赋值布尔值,去掉不必要的分支判断

5. 升级后重启Odoo服务

模块更新完成后,必须重启服务确保新字段加载生效:

# 适用于systemd管理的Odoo服务
sudo systemctl restart odoo
# 验证服务状态
sudo systemctl status odoo

内容的提问来源于stack exchange,提问作者Md Tanvir Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:53:29