最近公司的某个项目用到了nginx+lua去实现高性能的接口服务,我便学习了lua,把项目写完了。但在写项目的过程中,碰到了一些坑。虽说耗时耗力解决掉了,但可能其他人也碰到这些坑,所以,把碰到的坑记录在此,希望对其他人有些帮助。
nginx配置中的lua_package_path指令
这个指令是说,lua应该去哪里寻找lua文件。奇葩的是,整个nginx的配置中,无论多少站点,只能存在一条这个指令。
当存在多个项目的时候,这个指令就不够用了。当然,也有解决办法。。。就是package.path变量。
解决办法:
lua_package_path只设置共用包的路径,不包含项目私有包的路径
package.path变量
这个变量是跟上边的指令其实是一个作用,都是指示lua去哪里寻找lua文件的。但!这个变量竟然是个全局变量!这个全局不是说,你的一次请求中,它是全局的,而是针对所有nginx下的站点的。。。
当存在多个项目的时候,大家覆盖来覆盖去。。。其乐无穷啊。。。
解决办法:
每个项目使用同一个内部变量保存全局共有包的加载路径列表;再使用一个内部变量保存本项目的私有包的加载路径列表。然后,设置package.path的值为两者的和。。。
总结
虽说解决办法是有了,但是总感觉怪怪的呢?每个项目都保存了一份共有的package path,但是如果共有的package列表发生了变化呢?要去更新每个项目。。。