【问题标题】:how to load 3rd party lua libs (installed via luarocks) into haproxy如何将第 3 方 lua 库(通过 luarocks 安装)加载到 haproxy
【发布时间】:2018-04-17 20:27:44
【问题描述】:

我正在使用 Lua API 编写将在 HAproxy 内部运行的 lua 脚本。

我的脚本正在使用我想在我的机器上安装的socket 包。

目前我在 docker 中运行,我的 dockerfile 看起来像这样:

FROM haproxy:1.7

RUN apt-get update -y &&  apt-get install curl luarocks -y
RUN luarocks install luasocket

EXPOSE 80 9000

COPY 500error.json.http /etc/haproxy/errorfiles/
COPY hello_world.lua /etc/haproxy/scripts/

我的脚本有下一行:

local http = require('socket.http')

在运行 lua 解释器时可以正常工作,但在运行 haproxy 时不行:

[ALERT] 298/104833 (8) : parsing [/usr/local/etc/haproxy/haproxy.cfg:5] : lua runtime error: /etc/haproxy/scripts/hello_world.lua:1: module 'socket.http' not found:

我应该如何将它正确加载到 haproxy?

【问题讨论】:

  • 虽然这不是错误的原因,但您随后可能会发现您无法将 socket.http 与 HAProxy 一起使用,如果它执行任何阻塞操作。我已经有一段时间没有使用 HAProxy 进行任何密集的 Lua 编程了,但我记得“手动”执行远程 HTTP 请求,使用 HAProxy 的内置 Lua 套接字功能发送由我的代码构建的原始 HTTP 请求,并使用正则表达式解析响应,并且我不得不使用硬编码的 IP 地址,因为我没有异步 DNS 功能。 YMMV。

标签: lua haproxy


【解决方案1】:

您可以在 require luasocket 模块之前打印 package.pathpackage.cpath 值。

这个值是 lua 存储加载库的路径。

【讨论】:

  • 啊...这意味着编译成 HAproxy 的 Lua 版本可能看起来与默认的本地 Lua 解释器不同。使用 HAProxy,您可能需要将这些写入 syslog 以查看输出,例如core.Alert("package search path is " .. package.path);
猜你喜欢
  • 2019-11-05
  • 2021-02-09
  • 1970-01-01
  • 2020-05-25
  • 2011-09-13
  • 2014-01-25
  • 2015-05-13
  • 2015-08-20
  • 2014-10-25
相关资源
最近更新 更多