本文主要记录如何在freeswitch的lua脚本中实现操作redis的环境搭建。
安装lua5.1
freeswitch V1.6默认集成的是lua5.1的版本,如果改用lua5.2的版本使用的时候会报如下的错误,具体原因不知道是什么:
2019-07-26 17:49:32.857665 [INFO] switch_cpp.cpp:1365 --123------TEST
2019-07-26 17:49:32.857665 [ERR] mod_lua.cpp:203 error loading module 'socket.core' from file '/usr/local/lib/lua/5.2/socket/core.so':
/usr/local/lib/lua/5.2/socket/core.so: undefined symbol: luaL_setfuncs
stack traceback:
[C]: ?
[C]: in function 'require'
/usr/local/share/lua/5.2/socket.lua:12: in main chunk
[C]: in function 'require'
/usr/local/share/lua/5.2/redis.lua:793: in function 'create_connection'
/usr/local/share/lua/5.2/redis.lua:836: in function 'connect'
/usr/local/freeswitch/scripts/test-pwd.lua:7: in main chunk
-
下载安装包:
wget http://www.lua.org/ftp/lua-5.1.5.tar.gz tar -zxvf lua-5.1.5.tar.gz cd lua-5.1.5
-
编译安装:
# 设置安装平台,如果确实部分依赖库,直接通过yum install安装 make linux # 执行安装 make install
安装luarocks
-
下载安装包:
wget http://luarocks.github.io/luarocks/releases/luarocks-2.4.4.tar.gz tar -zxvf luarocks-2.4.4.tar.gz cd luarocks-2.4.4
-
编译安装:
./configure; make bootstrap
-
版本确认:
# 执行命令 luarocks # 出现如下提示说明版本正常 ... CONFIGURATION Lua version: 5.1 Configuration files: System: /usr/local/etc/luarocks/config-5.1.lua (ok) User : /root/.luarocks/config-5.1.lua (not found)
安装redis-lua插件
redis-lua插件封装了对redis操作,redis-lua用法详细见官网。
luarocks install redis-lua
配置FreeSWITCH的lua
配置autoload_configs/lua.conf.xm,配置so和lua文件的目录(这里路径是luarocks控件的.lua和.so的保存位置)。
<param name="module-directory" value="/usr/local/lib/lua/5.1/?.so"/>
<param name="script-directory" value="/usr/local/share/lua/5.1/?.lua"/>
重启刷新FreeSWITCH配置,因为mod_lua模块不能reload。
书写lua脚本,配置到freewitch的拨号计划
test-pwd.lua
freeswitch.consoleLog("INFO", "--123------TEST")
local redis = require 'redis'
local params = {
host = '127.0.0.1',
port = 6379
}
local client = redis.connect(params)
client:auth("your_password")
freeswitch.consoleLog("INFO", "--------TEST connect")
local value = client:get("foo")
freeswitch.consoleLog("INFO", value)
在fs_cli执行lua脚本,执行成功:
lua test-pwd.lua
在拨号计划中使用使用lua脚本:
<action application="lua" data="test-pwd.lua"/>