Kong的入口在哪里?

2020-03-31  本文已影响0人  印随2018

OpenResty的项目入门比较困难,其中一个重要原因就是没有入口函数,即程序员熟悉的main函数,这一点和其他开发平台完全不同。对于初学者来说,这一点就需要很长时间才能习惯。下面,我们就拿openresty社区比较成功的开源项目Kong,来做一个简单的介绍。

nginx.conf

因为OpenResty的唯一入口是Nginx.conf,kong也不会例外

snippet-1

1   init_by_lua_block {
2     kong = require 'kong'
3     kong.init()
4   }

snippet-1#L2是最关键的代码。但是从源码中,并没有找到kong.lua。从种种迹象(NGINX.CONF引用的多个函数)是指向kong/init.lua,不合理呀~

再看看nginx.conf配置文件

snippet-2

1   lua_package_path '?/init.lua;./kong/?.lua;/root/resthub-edge/?.lua;;';

很明显,require kong命中了加载规则?/init.lua

这样就解释了snippet-1#L2的合理性。

kong.lua

如果你查看过kong的安装目录,就会发现kong.lua(/usr/local/share/lua/5.1/kong.lua)是存在的,这又是什么原因呢?

从源码安装kong的时候使用的是make install,那我们来看看Makefile文件吧

snippet-3

1   .PHONY: install dev lint test test-integration test-plugins test-all
2
3   install:
4       @luarocks make OPENSSL_DIR=$(OPENSSL_DIR)

从snippet-3#L4可以看出,lua代码是使用luarocks安装的,那我们看看它的配置文件kong-0.11.1-0.rockspec

 1 build = {
 2   type = "builtin",
 3   modules = {
 4     ["kong"] = "kong/init.lua",
 5     ["kong.meta"] = "kong/meta.lua",
 6     ["kong.constants"] = "kong/constants.lua",
 7     ["kong.singletons"] = "kong/singletons.lua",
 8     ["kong.conf_loader"] = "kong/conf_loader.lua",

从snippet-4#L4可以看出,luarocks在安装的时候,把init.lua改名为kong.lua,并且上移了一层目录。

why?我也不知道,只能去问问kong的社区问问了。

上一篇 下一篇

猜你喜欢

热点阅读