Openresty中使用LuaJit

今天在使用Openresty的时候,遇到了一个问题:

local resty_sha1 = require "resty.sha1"

想使用resy.sha1的时候,出现了error,log如下:

2013/09/25 09:00:40 [error] 19620#0: *3 lua entry thread aborted: runtime error: /usr/local/openresty/lualib/resty/sha.lua:4: module 'ffi' not found:
no field package.preload['ffi']
no file '/usr/local/openresty/lualib/ffi.lua'
no file '/usr/local/openresty/lualib/ffi/init.lua'
no file './ffi.lua'
no file '/usr/local/share/lua/5.1/ffi.lua'
no file '/usr/local/share/lua/5.1/ffi/init.lua'
no file '/usr/local/lib/lua/5.1/ffi.lua'
no file '/usr/local/lib/lua/5.1/ffi/init.lua'
no file '/usr/local/openresty/lualib/ffi.so'
no file './ffi.so'
no file '/usr/local/lib/lua/5.1/ffi.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
coroutine 0:
[C]: in function 'require'
/usr/local/openresty/lualib/resty/sha.lua:4: in main chunk
[C]: in function 'require'
/usr/local/openresty/lualib/resty/sha1.lua:4: in main chunk
[C]: in function 'require'

看log应该是找不到Lua的module--ffi。FFI(http://luajit.org/ext_ffi.html)是LuaJit里面的一个库,用来调用外部C语言函数。看来问题出在我编译openresty的时候,没有config到LuaJit,于是我需要添加LuaJit,就是重新configure和make我的openresty,并且在编译的时候加入参数 --with-luajit。

首先,进入openresty的source code文件夹,

cd /xxx/xxx/openresty-folder

然后进行config,并加上参数,

./configrue --with-luajit

成功之后,运行make 和 make install,网上说 make install会使你的原来的nginx.conf丢失,所以要先备份一下你的代码, 虽然我使用过程中没有出现代码丢失,但还是backup一下比较保险,

make
sudo make install

此时,LuaJit就已经添加到Openresty里面去了,这时,我们需要重启nginx程序, 不要使用 -s reload 参数, 要先停止nginx 执行./nginx -s stop, 再启动. 这时当我再次使用

local resty_sha1 = require "resty.sha1"
的时候,就没有再报错了。

当然,如果你使用的是原生的Nginx,也可以这样来添加模块。

你可能感兴趣的:(nginx,Module,openresty,luajit,ffi)