作为 FusionPBX GUI 系统的一部分,我们安装了 Freeswitch。FusionPBX 3.7.1 版,Freeswitch 1.4.9 版。FusionPBX 使用的数据库是 Postgres。
安装默认编译最低成本路由模块“mod_lcr”,并在模块配置文件中启用,模块“/usr/local/freeswitch/mod/mod_lcr.so”存在。
但是,我似乎无法使用 mod_lcr。
发出命令
reload mod_lcr
给出以下错误:
2016-10-22 23:22:12.023181 [ERR] mod_lcr.c:1078 Unable to determine database RANDOM function
2016-10-22 23:22:12.023181 [DEBUG] mod_lcr.c:1110 param val is rate,quality,reliability
2016-10-22 23:22:12.023181 [DEBUG] mod_lcr.c:1113 arg #0/3 is rate
2016-10-22 23:22:12.023181 [DEBUG] mod_lcr.c:1113 arg #1/3 is quality
2016-10-22 23:22:12.023181 [DEBUG] mod_lcr.c:1113 arg #2/3 is reliability
2016-10-22 23:22:12.023181 [ERR] mod_lcr.c:2089 Unable to load lcr config file
2016-10-22 23:22:12.023181 [CRIT] switch_loadable_module.c:1447 Error Loading module /usr/local/freeswitch/mod/mod_lcr.so
**Module load routine returned an error**
我查看了源代码“mod_lcr.c”,但看不到实际的错误是什么。它清楚地加载配置并执行函数“lcr_load_config”的一部分,从上面记录到控制台的内容可以看出,但在我无法清楚识别的地方出现错误。
这似乎与没有为此模块正确定义数据库有关。在 mod_lcr.c 的第 1056 行,它应该在读取配置的“设置”xml 标签后将数据源名称写入日志,但它没有。设置标签确实存在 - 请参阅下面的配置外观。但它没有设置“globals.odbc_dsn”变量。
“mod_lcr”的 Freeswitch 文档在这一点上非常吝啬,只是说
“编辑配置文件和数据库连接信息的默认配置 /usr/local/freeswitch/conf/autoload_configs/lcr.conf.xml”
但是我需要在该配置文件中添加什么?
默认情况下,在我的安装中它包含:
<settings>
<param name="odbc-dsn" value="$${dsn_system}"/>
</settings>
我将 lcr、carriers、carrier_gateway 表添加到数据库“freeswitch”和“fusionpbx”中。没有变化,仍然是同样的错误。
任何想法这里可能有什么问题?
我自己想通了。
该错误实际上是缺少数据库信息。错误消息“无法读取配置文件”具有误导性。
关键是FusionPBX安装没有设置变量“dsn_system”。可以设置该变量,或者在配置文件 /usr/local/freeswitch/conf/autoload_configs/lcr.conf.xml 中明确声明连接字符串。
因此,要改进 mod_lcr 的 Freeswitch 手册页,您需要执行以下操作才能使用“mod_lcr”:
对于 Postgres 数据库,这相当简单。这是 lcr.conf.xml 文件中的显式设置: