2017-11-05 8 views
0

나는 Lua API를 사용하여 HAproxy 내부에서 실행될 lua 스크립트를 작성하고 있습니다.luarocks를 통해 설치된 타사 lua 라이브러리를 haproxy로로드하는 방법

내 스크립트는 내 컴퓨터에 설치하려는 socket 패키지를 사용하고 있습니다.

현재 나는 고정 표시기 내에서 실행하고있어 내 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') 
루아 인터프리터를 실행할 때 괜찮 작동

하지만 실행시 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로로드해야합니까?

+1

이것은 오류의 원인은 아니지만, 차단 작업을 수행하는 경우 HAProxy와 함께 'socket.http'를 사용할 수 없다는 것을 발견 할 수 있습니다. HAProxy를 사용하여 집중적 인 루아 프로그래밍을 한 지 오래되었지만 HAProxy의 루아 소켓 기능을 사용하여 코드에서 생성 된 원시 HTTP 요청을 보내고 regexes를 사용하여 응답을 구문 분석하여 원격 HTTP 요청을 "손으로"수행하는 것을 기억합니다 , 비동기 DNS 기능이 없기 때문에 하드 코딩 된 IP 주소를 사용해야했습니다. YMMV. –

답변

0

luasocket 모듈을 요구하기 바로 전에 package.pathpackage.cpath 값을 인쇄 할 수 있습니다.

이 값은 라이브러리를로드하는 경로를 저장하는 곳입니다.

+0

Ah ... HAproxy로 컴파일 된 Lua 버전은 기본 로컬 루아 인터프리터가 찾고있는 곳과는 다른 곳을 찾고있을 수 있습니다. HAProxy를 사용하면 출력을보기 위해 syslog에 이것을 써야 할 수도 있습니다. 'core.Alert ("패키지 검색 경로는".. package.path);' –