背景
使用openresty开发一个项目,为了方便的根据规则解析抽取请求body中的一些数据,需要使用jmespath。
项目地址:
GitHub - jmespath/jmespath.lua: A pure Lua implementation of JMESPath
环境:
使用的openresty的官方镜像, openresty/openresty:centos
使用 luarocks install jmespath,报错缺少gcc
sh-4.4# luarocks install jmespath
Installing https://luarocks.org/jmespath-0.1-0.src.rock
Missing dependencies for jmespath 0.1-0:
luajson >= 1.3.3 (not installed)
jmespath 0.1-0 depends on lua >= 5.1 (5.1-1 provided by VM)
jmespath 0.1-0 depends on luajson >= 1.3.3 (not installed)
Installing https://luarocks.org/luajson-1.3.4-1.src.rock
Missing dependencies for luajson 1.3.4-1:
lpeg >= 0.8.1 (not installed)
luajson 1.3.4-1 depends on lua >= 5.1 (5.1-1 provided by VM)
luajson 1.3.4-1 depends on lpeg >= 0.8.1 (not installed)
Installing https://luarocks.org/lpeg-1.0.2-1.src.rock
lpeg 1.0.2-1 depends on lua >= 5.1 (5.1-1 provided by VM)
gcc -O2 -fPIC -I/usr/local/openresty/luajit/include/luajit-2.1 -c lpcap.c -o lpcap.o
sh: gcc: command not found
Error: Failed installing dependency: https://luarocks.org/luajson-1.3.4-1.src.rock - Failed installing dependency: https://luarocks.org/lpeg-1.0.2-1.src.rock - Build error: Failed compiling object lpcap.o
安装步骤
1. 安装gcc
yum install gcc
2. 再次使用luarocks安装
luarocks install jmespath
sh-4.4# luarocks install jmespath
Installing https://luarocks.org/jmespath-0.1-0.src.rock
jmespath 0.1-0 depends on lua >= 5.1 (5.1-1 provided by VM)
jmespath 0.1-0 depends on luajson >= 1.3.3 (1.3.4-1 installed)
cp: -r not specified; omitting directory 'jmespath.lua'
Error: Build error: Failed installing jmespath.lua in /usr/local/openresty/luajit/lib/luarocks/rocks-5.1/jmespath/0.1-0/lua/jmespath.lua: Failed copying jmespath.lua to /usr/local/openresty/luajit/lib/luarocks/rocks-5.1/jmespath/0.1-0/lua/jmespath.lua
3. 手动将jmespath拷贝到openresty 的lualib目录
curl -o /usr/local/openresty/lualib/resty/jmespath.lua https://raw.githubusercontent.com/jmespath/jmespath.lua/master/jmespath.lua
测试安装成功
sh-4.4# luajit
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2021 Mike Pall. https://luajit.org/
JIT: ON SSE3 SSE4.1 BMI2 fold cse dce fwd dse narrow loop abc sink fuse
> jmespath = require 'resty.jmespath'
> expression = "foo.baz"
> data = { foo = { baz = "bar" } }
> result = jmespath.search(expression, data)
> print(result)
bar