我看过this和:
httpd-2.4.9
所以这是我到目前为止所尝试的,但没有成功:
尝试在我的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 shared /usr/local/share/lua/5.2
lfs.so
放入更通用的共享/usr/local/share
lfs.so
放入共享的http模块/opt/httpd-2.4.9/modules/
现在我还没有找到一个有效的解决方案。任何的想法?
顺便说一下,我可以使用r:notice()
来写一些信息,那么有没有办法可以转储lua正在使用的path
和/或cpath
?
在我的文件中,当我在文件require "bb"
中有指令aa.lua
并且bb.lua
与aa.lua
处于同一路径时,它可以正常工作。如果我尝试执行export LUA_PATH=
并重新启动我的网络服务器,则指令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
的{{1}}函数。
现在,如果我尝试将此代码添加到posix_c.so
的lua文件中,请执行以下操作:
mod_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
在阅读this之后,我猜到了什么问题:我安装了5.2.1版本,nil,/usr/local/lib/posix_c.so: undefined symbol: luaL_setfuncs
编译为5.1。所以我删除了5.2.1,所有5.2链接,并重新编译了mod_lua
lib。现在网页给了我这个:luaposix
这意味着它成功地打开了库。
知道发生了什么事吗?
答案 0 :(得分:2)
我做到了!
有两件事是封锁的,如果遇到同样的问题,我希望能帮助其他人:
mod_lua
为5.1,lua
安装为5.2。解决方案:删除5.2并安装5.1,然后重新编译所有需要的模块*.so
位置。这个命令帮助我解决了这个问题:r:puts(tostring(package.cpath) .. ',\n')
。它显示了lua
寻找动态库的路径。没有人匹配我的lfs.so
,posix_c.so
和posix.lua
所在的位置。因此,我创建了文件夹/usr/local/lib/lua/5.1/
(这是非常“干净”的名称和位置给我)并在那里复制了这些文件。现在一切正常。