我试图让 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 文件,但我不确定如何做到这一点。
不用担心,我只需要睡一晚就能保持清醒的头脑。
我下载了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 脚本时,其他客户端无法执行命令。
归档时间: |
|
查看次数: |
1324 次 |
最近记录: |