今天在使用Openresty的時候,遇到了一個問題: html
local resty_sha1 = require "resty.sha1"
想使用resy.sha1的時候,出現了error,log以下: nginx
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' shell
看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文件夾, ui
cd /xxx/xxx/openresty-folder
而後進行config,並加上參數, lua
./configrue --with-luajit
成功以後,運行make 和 make install,網上說 make install會使你的原來的nginx.conf丟失,因此要先備份一下你的代碼, 雖然我使用過程當中沒有出現代碼丟失,但仍是backup一下比較保險, spa
make
sudo make install
此時,LuaJit就已經添加到Openresty裏面去了,這時,咱們須要重啓nginx程序, 不要使用 -s reload 參數, 要先中止nginx 執行./nginx -s stop, 再啓動. 這時當我再次使用 rest
local resty_sha1 = require "resty.sha1"的時候,就沒有再報錯了。
固然,若是你使用的是原生的Nginx,也能夠這樣來添加模塊。 code