我正在尝试为Apache设置mod_lua模块,但在访问第三方Lua模块时遇到了困难。假设我在Apache的htdocs文件夹中有一个hello_world.lua,其中包含以下内容:
require "apache2"
function handle(r)
r.content_type = "text/html"
r:write "Hello World from <strong>mod_lua</strong>."
return apache2.OK
end
然后我去“http://localhost/hello_world.lua”,它将按预期运行。但是,如果我尝试添加一行,例如:
require "socket"
或者
require "cgilua"
我得到以下输出:
错误!
尝试调用零值
但是,某些模块可以正常工作,例如:
require "base"
按预期运作。
如果我导航到文件系统中的base.lua(c:\ program files \ lua \ 5.1 \ lua \ base.lua)并删除此文件,然后尝试运行我的脚本我得到与上述相同的错误。所以这必须是mod_lua检查模块的目录。模块dll不在这个文件夹中,而是在c:\ program files \ lua \ 5.1 \ clibs \中,我将环境变量LUA_CPATH设置为指向。
Luasocket和cgilua都存在于此文件夹中,但当我尝试在我的脚本中要求它们时它们会导致错误。
从我可以收集到的内容,它适用于任何纯lua模块,但任何具有cmodules(套接字等)的东西都会导致问题。
其他信息:
需要做些什么才能在mod_lua运行的脚本中需要模块?
答案 0 :(得分:3)
看起来您需要将LuaPackageCPath和/或LuaPackagePath指令添加到您的站点配置中(在全局配置文件中,或.htaccess,...)。
在你的情况下,我假设
LuaPackagePath c:\program files\lua\5.1\lua\
LuaPackageCPath c:\program files\lua\5.1\clibs\
应该这样做。