在 Redis 中安装其他 LUA 模块

在 Redis 中安装其他 LUA 模块

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

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

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

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

答案1

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

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

#include <lauxlib.h>

#include "lauxlib.h"

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

lua_cjson.o

在其旁边添加“luacurl.o”,如下所示

lua_cjson.o luacurl.o

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

FINAL_LIBS=-lm

FINAL_LIBS=-lm -lcurl

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

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

答案2

在 Redis 中安装自定义 Lua 模块需要从源代码重新编译 Redis,使用 user3786834 列出的程序。如果您确实需要使用某个特定模块,那么这可能是您唯一的选择。

但是,如果您的库仅使用 Lua 代码(没有 C 代码),那么最简单的选择(这也会提高应用程序的可移植性)可能是将该模块的源代码直接包含到您的 EVAL 脚本中。

相关内容