Я пытаюсь заставить 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, но это плохое решение.
Как мне скомпилировать HTTP-запросы в Redis Lua?
Предположительно, самый простой способ сделать это - создать отдельный файл luasocket.so, но я не уверен, как это сделать.
Не беспокойтесь, все, что мне требовалось, это ночной сон, чтобы иметь свежий разум.
Я загрузил http://files.luaforge.net/releases/luacurl/luacurl и переместите luacurl.c в папку / deps / lua / src / и отредактируйте строку 23 из
#include <lauxlib.h>
к
#include "lauxlib.h"
а затем в / deps / lua / src / Makefile (make-файл Lua, а не Redis) перейдите к строке 30 и найдите
lua_cjson.o
добавьте "luacurl.o" рядом с ним вот так
lua_cjson.o luacurl.o
а затем в / src / Makefile (файл сборки Redis, а не Lua) измените строку 54 с
FINAL_LIBS=-lm
к
FINAL_LIBS=-lm -lcurl
Наконец, убедитесь, что вы установили «yum install curl-devel», а затем скомпилируете его.
Имейте в виду, что ни один другой клиент не может выполнять команды, пока сервер занят сценариями Lua.
Установка пользовательских модулей Lua в Redis требует перекомпиляции Redis из исходников, используя процедуру типа user3786834. Если вам действительно нужно использовать какой-то конкретный модуль, это может быть вашим единственным выбором.
Однако, если ваша библиотека использует только код Lua (без кода C), простейшим вариантом, который также увеличивает переносимость вашего приложения, может быть включение исходного кода этого модуля непосредственно в ваш сценарий EVAL.