在 Redis 中安装额外的 LUA 模块

use*_*834 6 lua redis

我试图让 Redis 允许 EVAL ( http://redis.io/commands/EVAL ) 发出 HTTP 请求。

两个模块:LuaCURL 和 Luasocket 提供了这种能力。Redis 源代码有一个包含附加模块(例如 cjson)的目录http://download.redis.io/redis-stable/deps/lua/src/,我尝试添加 luacurl.c 但我收到一个又一个错误。我已经设法编译它启用 os.execute - 通过编辑 scripting.c - 这允许我运行 curl 命令,但这是一个糟糕的解决方案。

如何在 Redis 的 Lua 中编译 HTTP 请求?

据推测,最简单的方法是拥有一个独立的 luasocket.so 文件,但我不确定如何做到这一点。

use*_*834 3

不用担心,我只需要睡一晚就能保持清醒的头脑。

我下载了http://files.luaforge.net/releases/luacurl/luacurl并将 luacurl.c 移动到 /deps/lua/src/ 文件夹中并编辑了第 23 行

#include <lauxlib.h>
Run Code Online (Sandbox Code Playgroud)

#include "lauxlib.h"
Run Code Online (Sandbox Code Playgroud)

然后在 /deps/lua/src/Makefile (Lua 的 makefile,而不是 Redis 的)中转到第 30 行并找到

lua_cjson.o
Run Code Online (Sandbox Code Playgroud)

像这样在它旁边添加“luacurl.o”

lua_cjson.o luacurl.o
Run Code Online (Sandbox Code Playgroud)

然后在 /src/Makefile (Redis 的 makefile,而不是 Lua 的)中将第 54 行从

FINAL_LIBS=-lm
Run Code Online (Sandbox Code Playgroud)

FINAL_LIBS=-lm -lcurl
Run Code Online (Sandbox Code Playgroud)

最后,确保已经安装了“yum install curl-devel”,然后进行编译。

请记住,当服务器忙于处理 Lua 脚本时,其他客户端无法执行命令。