如何在 aquarium/scrapy-splash 中加载 LUA 模块?

我正在为 scrapy-splash 编写一个 LUA 脚本,想要使用 socket.http 模块。 该模块已安装,我已禁用沙箱并配置了包路径。但我无法让它工作。 我的环境是在 Linux 上的 aquarium。

我使用 luarocks 安装了 luasocket 并添加了

--disable-lua-sandbox --lua-package-path "/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/?.lua"

to the splash instance in docker-compose.yml

当我运行脚本时,我会得到以下错误:

"error": {"info": {"type": "LUA_INIT_ERROR", "message": "[string \"<python>\"]:1: module 'socket.http' not found:
    no field package.preload['socket.http']
    no file '/app/splash/lua_modules/socket/http.lua'
    no file '/app/splash/lua_modules/libs/socket/http.lua'
    no file '/usr/local/share/lua/5.1/socket/http.lua'
    no file '/usr/local/share/lua/5.1/socket/http/socket/http.lua'
    no file '/usr/local/share/lua/5.2/socket/http.lua'
    no file '/usr/local/share/lua/5.2/socket/http/init.lua'
    no file '/usr/local/lib/lua/5.2/socket/http.lua'
    no file '/usr/local/lib/lua/5.2/socket/http/init.lua'
    no file '/usr/share/lua/5.2/socket/http.lua'
    no file '/usr/share/lua/5.2/socket/http/init.lua'
    no file './socket/http.lua'
    no file '/usr/local/lib/lua/5.2/socket/http.so'
    no file '/usr/lib/x86_64-linux-gnu/lua/5.2/socket/http.so'
    no file '/usr/lib/lua/5.2/socket/http.so'
    no file '/usr/local/lib/lua/5.2/loadall.so'
    no file './socket/http.so'
    no file '/usr/local/lib/lua/5.2/socket.so'
    no file '/usr/lib/x86_64-linux-gnu/lua/5.2/socket.so'
    no file '/usr/lib/lua/5.2/socket.so'
    no file '/usr/local/lib/lua/5.2/loadall.so'
    no file './socket.so'"}, "description": "Error happened while executing Lua script", "type": "ScriptError", "error": 400}, "qsize": 0, "status_code": 400}

即使我的机器上存在文件 /usr/local/share/lua/5.1/socket/http.lua,但仍会抛出错误。我还尝试过对文件进行 chmod 777,但仍然会抛出错误。

点赞
用户4783692
用户4783692

原文:

It turned out that there was no need for me to use `socket.http`.

I am using [`splash:http_get`](https://splash.readthedocs.io/en/stable/scripting-ref.html?highlight=http_get#splash-http-get) and [`splash:http_post`](https://splash.readthedocs.io/en/stable/scripting-ref.html?highlight=http_get#splash-http-post) now and it is working fine.

翻译后:

事实证明,我不需要使用 `socket.http`。

现在我使用 [`splash:http_get`](https://splash.readthedocs.io/en/stable/scripting-ref.html?highlight=http_get#splash-http-get) 和 [`splash:http_post`](https://splash.readthedocs.io/en/stable/scripting-ref.html?highlight=http_get#splash-http-post),一切都很顺利。
2019-04-05 13:14:29