nginx lua package path的坑


最近公司的某个项目用到了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列表发生了变化呢?要去更新每个项目。。。


发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注