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。
验证流程
- 保存修改后的模块代码,若为源码安装ejabberd,需重新编译
- 确保全局SQL配置正确,模块配置中无未声明的参数
- 执行
./ejabberdctl restart重启服务,检查error.log是否存在新错误 - 测试mod_hello_world的业务逻辑,确认能否正常读写MySQL数据
内容的提问来源于stack exchange,提问作者Prabhu
相关产品推荐
相关产品推荐

