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

Ejabberd自定义模块mod_hello_world连接MySQL报错求助

解决ejabberd mod_hello_world连接MySQL的配置问题

核心问题分析

mod_hello_world作为示例模块,默认没有内置db_type配置项,所以你在模块下添加该参数会触发未知选项错误。要让它成功连接MySQL,需要从模块代码和全局配置两方面调整。

具体配置步骤

1. 确认全局SQL配置生效

先确保ejabberd.yml中的全局MySQL参数配置正确,这些是所有依赖SQL的模块的基础配置,无需在模块下重复定义:

sql_type: mysql
sql_server: "localhost"
sql_database: "ejabberd_db"
sql_username: "ejabberd_user"
sql_password: "your_db_password"
sql_port: 3306

2. 修改mod_hello_world模块代码

示例模块默认没有数据库连接逻辑,需要手动添加SQL支持:

  • 打开模块源码文件(通常为mod_hello_world.erl)
  • 在模块的业务逻辑或初始化函数中,引入ejabberd的SQL操作API,示例代码如下:
    % 示例:执行SQL查询
    fetch_sample_data() ->
        ejabberd_sql:sql_query(<<"SELECT * FROM sample_table;">>).
    
  • 若模块启动时需要初始化数据库连接,需确保模块依赖ejabberd_sql,可在模块的.app文件或编译配置中添加该依赖。

3. 按需声明模块配置项(可选)

如果需要在模块下自定义db_type参数,必须先在模块代码中通过gen_mod:opt_type/1函数声明该配置项,否则ejabberd会识别为未知选项:

opt_type(db_type) ->
    {atom, [sql, mnesia]};
opt_type(_) ->
    [db_type].

完成代码声明后,才能在ejabberd.yml的mod_hello_world配置段中使用db_type: sql。

验证流程

  1. 保存修改后的模块代码,若为源码安装ejabberd,需重新编译
  2. 确保全局SQL配置正确,模块配置中无未声明的参数
  3. 执行./ejabberdctl restart重启服务,检查error.log是否存在新错误
  4. 测试mod_hello_world的业务逻辑,确认能否正常读写MySQL数据

内容的提问来源于stack exchange,提问作者Prabhu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:48:19