我读了这篇文章,
- 没有可行的解决方案
- 我运行的不是Windows而是Linux
- 这是一个自制的编译
- 运行
httpd-2.4.9
所以这是我到目前为止尝试的,但没有成功:
- 遵循这个建议"我在哪里放置第三方lua模块"?
-
试图在我的vhost conf中添加Lua的所有可能的PATH:
LuaPackageCPath /web/htdocs/olivier/doonoo/2/ LuaPackagePath /web/htdocs/olivier/doonoo/2/ LuaPackageCPath /web/htdocs/olivier/doonoo/2 LuaPackagePath /web/htdocs/olivier/doonoo/2 LuaPackageCPath /web/htdocs/olivier/doonoo/2/?.so LuaPackagePath /web/htdocs/olivier/doonoo/2/?.so LuaPackageCPath /web/htdocs/olivier/doonoo/2/? LuaPackagePath /web/htdocs/olivier/doonoo/2/? LuaPackageCPath /web/htdocs/olivier/doonoo/2/ LuaPackagePath /web/htdocs/olivier/doonoo/2/ LuaPackageCPath ./?.so LuaPackagePath ./?.so LuaPackageCPath ./ LuaPackagePath ./ LuaPackageCPath ./? LuaPackagePath ./?
-
试图把
lfs.so
放在我的http文件夹:/local/install/httpd-2.4.9/modules/lua
- 试图将
lfs.so
放入我的lua共享/usr/local/share/lua/5.2
- 试图将
lfs.so
放入更通用的共享/usr/local/share
- 试图将
lfs.so
放入共享http模块/opt/httpd-2.4.9/modules/
现在我还没有找到一个有效的解决方案。任何想法?顺便说一下,我可以使用r:notice()
来写一些信息,所以有一种方法来转储path
和/或cpath
, lua正在使用?
在我的文件中,当我在文件aa.lua
和bb.lua
中有指令require "bb"
与aa.lua
处于相同的路径时,它可以工作。如果我尝试做export LUA_PATH=
并重新启动我的web服务器,指令require "bb"
在aa.lua
中不再工作。这意味着环境变量LUA_PATH
和LUA_CPATH
对Apache的mod_lua
有一定的影响。
现在我尝试了别的东西:动态库。我这样做:
# lua
Lua 5.2.1 Copyright (C) 1994-2012 Lua.org, PUC-Rio
> a,b = package.loadlib('/usr/local/lib/posix_c.so', 'fcntl')
> print (a,b)
function: 0x7fbda3f845b0 nil
>
这意味着它尝试成功打开并获得fcntl
函数来自posix_c.so
。
现在,如果我尝试将这段代码添加到mod_lua
的lua文件中,像这样:
function handle(r)
r.headers_out['Cache-Control'] = 'no-cache, must-revalidate'
r.headers_out['Expires'] = 'Mon, 26 Jul 1997 05:00:00 GMT'
r.content_type = 'application/json';
local a,b = package.loadlib('/usr/local/lib/posix_c.so', 'fcntl');
r:puts(tostring(a)..','..tostring(b))
return apache2.OK
end
我得到了这样的输出:
nil,/usr/local/lib/posix_c.so: undefined symbol: luaL_setfuncs
看完这篇文章,我猜出了什么问题:我安装了5.2.1版本,mod_lua
是用5.1编译的。因此,我删除了5.2.1和所有5.2链接,并重新编译了luaposix
库。现在网页显示:function: 0x220bce0,nil
,这意味着它成功打开了库。
知道是怎么回事吗?
我成功了!
有两件事阻塞了,如果他们有同样的问题,我希望能帮助其他人:
- 版本号错误。
- 坏
*.so
位置。这个命令帮助我解决了这个问题:r:puts(tostring(package.cpath) .. ',n')
。它显示了lua
查找动态库的路径。没有一个和我的lfs.so
、posix_c.so
和posix.lua
匹配。因此,我创建了文件夹/usr/local/lib/lua/5.1/
(这对我来说是非常"干净"的名称和位置),并将这些文件复制到那里。
mod_lua
为5.1版本,lua
为5.2版本。解决方案:删除5.2并安装5.1,然后重新编译所有需要的模块现在一切正常