Hello!
2013/10/5 csevan
>
> 问题如下:
> 最近我们服务器上需要加入lua-resty-mysql这块的模块,编译都已通过,但运行时总是出现如下图错误。lua里面语句很简单:
> local mysql = require "resty.mysql"
> ngx.say(mysql._VERSION)
>
> no field package.preload['resty.mysql']
> no file './resty/mysql.lua'
> no file '/usr/local/share/lua/5.1/resty/mysql.lua'
> no file '/usr/local/share/lua/5.1/resty/mysql/init.lua'
你的这个错误是因为 Lua 找不到 resty.mysql 这个 Lua 模块。你需要自己下载 lua-resty-mysql 库:
https://github.com/agentzh/lua-resty-mysql
然后把里面的 lib/resty/ 目录整体拷贝到 /usr/local/share/lua/5.1/ 这样的Lua 默认搜索路径下面。
当然,你需要确保对应文件路径对你的 nginx worker 进程所使用的系统帐户可读(即文件本身至少拥有读权限,其路径中的各级文件夹都拥有可执行权限)。
> 因为是已在使用的生产环境nginx只知道通过重新编译的方式加入模块。
> 不知道能否加直接加入openresty 作为集成模块。因为担心一些旧配置问题,没敢直接安装尝试。
> 编译语句如下:
[...]
> ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
[...]
> --add-module=../lua-resty-mysql
lua-resty-mysql 是一个纯 Lua 编写的 Lua 库,它并不是一个 nginx C 模块,所以你在编译 nginx 时使用
--add-module 添加它是完全错误的。关于什么是 Lua 模块,可以参考 Lua 5.1 官方手册中的 Modules
一节:http://www.lua.org/manual/5.1/manual.html#5.3
关于如何单独安装 lua-resty-mysql 库,可以参考它的官方文档中的 Installation 一节:
https://github.com/agentzh/lua-resty-mysql#installation
同时抄送给 openresty 中文邮件列表:https://groups.google.com/group/openresty
建议你也加入此列表并在那里交流这样的问题。谢谢合作!
Best regards,
-agentzh