我正在尝试为 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"
Or
require "cgilua"
我得到以下输出:
Error!
尝试调用 nil 值
但是,某些模块确实可以工作,例如:
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 的东西(套接字等)都会导致问题。
附加信息:
- 操作系统:Windows 7 家庭高级版
- LUA_PATH = c:\程序文件\lua\5.1\lua\
- LUA_PATH = c:\程序文件\lua\5.1\clubs\
- 阿帕奇版本:2.2.22
- mod_lua版本:http://www.corsix.org/content/mod-lua-win32#comment-3214 http://www.corsix.org/content/mod-lua-win32#comment-3214
需要做什么才能在 mod_lua 运行的脚本中调用模块?
看来你需要添加Lua包CPath http://httpd.apache.org/docs/trunk/mod/mod_lua.html#luapackagecpath and/or Lua包路径 http://httpd.apache.org/docs/trunk/mod/mod_lua.html#luapackagepath站点配置的指令(在全局配置文件或 .htaccess 中,...)。
就你而言,我假设
LuaPackagePath c:\program files\lua\5.1\lua\
LuaPackageCPath c:\program files\lua\5.1\clibs\
应该可以解决问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)