如何在 Apache 中设置 mod_lua 以访问第三方 Lua 模块?

Posted

技术标签:

【中文标题】如何在 Apache 中设置 mod_lua 以访问第三方 Lua 模块?【英文标题】:How to setup mod_lua in Apache to access third party Lua modules? 【发布时间】:2012-03-30 14:32:20 【问题描述】:

我正在尝试为 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"

我得到以下输出:

错误!

尝试调用一个 nil 值

但是,有些模块确实可以工作,例如:

require "base"

按预期运行。

如果我导航到文件系统 (c:\program files\lua\5.1\lua\base.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_CPATH = c:\program files\lua\5.1\clibs\ Apache 版本:2.2.22 mod_lua 版本:http://www.corsix.org/content/mod-lua-win32#comment-3214

需要做什么才能在 mod_lua 运行的脚本中引入模块?

【问题讨论】:

那么,以下建议的建议是否顺利.....? 【参考方案1】:

您似乎需要将LuaPackageCPath 和/或LuaPackagePath 指令添加到您的站点配置(在全局配置文件或.htaccess 中,...)。

在你的情况下,我会假设

LuaPackagePath c:\program files\lua\5.1\lua\
LuaPackageCPath c:\program files\lua\5.1\clibs\

应该可以解决问题。

【讨论】:

它对我不起作用。我已经编译了 lfs,然后我得到了一个 lfs.so 文件。如果我在与lfs.so 相同的文件夹中创建一个带有require "lfs" 的lua 文件并启动交互式lua,或者lua myscript.lua 它可以工作。但是如果我尝试通过mod_apache 它不起作用。日志文件中的错误是lua: Unable to find function handle in /web/folder/i.lua 添加 LuaPackagePath C:\Program Files (x86)\Lua\5.1\lib LuaPackageCPath C:\Program Files (x86)\Lua\5.1\clibs 后

以上是关于如何在 Apache 中设置 mod_lua 以访问第三方 Lua 模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache FOP 中设置默认语言

如何在 apache xampp 中设置环境变量?

如何在 Apache JClouds 中设置 HTTP 标头?

如何在Apache HttpClient中设置TLS版本

使用 Apache 时在 PHP 中设置用于访问的环境变量

如何在 Apache Felix maven-bundle-plugin 中设置 Provide-Capability 标头?