你好,我是温铭。
今天的内容,我特意安排成了视频的形式来讲解。不过,在你看视频之前,我想先问你这么几个问题:
- 在真实的项目中,你会配置 nginx.conf,以便和 Lua 代码联动吗?
- 你清楚 OpenResty 的代码结构该如何组织吗?
这两个问题,也是今天视频课要解决的核心内容,希望你可以先自己思考一下,并带着问题来学习今天的视频内容。
同时,我会给出相应的文字介绍,方便你在听完视频内容后,及时总结与复习。下面是今天这节课的文字介绍部分。
今日核心
opm 是 OpenResty 中为数不多的网站类项目,而里面的代码,基本上是由 OpenResty 的作者亲自操刀完成的。
很多 OpenResty 的使用者并不清楚,如何在真实的项目中去配置 nginx.conf, 以及如何组织 Lua 的代码结构。确实,在这方面可以参考的开源项目并不多,给学习使用带了不小的阻力。
不过,借助今天的这个项目,你就可以克服这一点了。你将会熟悉一个OpenResty 项目的结构和开发流程,还能看到 OpenResty 的作者是如何编写业务类 Lua 代码的。
opm 还涉及到数据库的操作,它后台数据的储存,使用的是PostgreSQL ,你可以顺便了解下 OpenResty 和数据库是如何交互的。
除此之外,这个项目还涉及到一些简单的性能优化,也是为了后面专门设立的性能优化内容做个铺垫。
最后,浏览完 opm 这个项目后,你可以自行看下另外一个类似的项目,那就是 OpenResty 的官方网站:https://github.com/openresty/openresty.org。
课件参考
今天的课件已经上传到了我的GitHub上,你可以自己下载学习。
链接如下:https://github.com/iresty/geektime-slides
如果有不清楚的地方,你可以在留言区提问,另也可以在留言区分享你的学习心得。期待与你的对话,也欢迎你把这篇文章分享给你的同事、朋友,我们一起交流、一起进步。
精选留言
2019-06-05 08:17:49
这个后面为什么有两个 分号呢 ?
2019-06-05 14:05:22
2019-06-06 14:08:07
2019-06-17 23:01:45
2.参照opm和openresty.org,源码结构均为util/,conf/,templates/,lua/
老师,学习openresty需要对nginx了解到什么程度啊
2019-11-16 17:05:18
2019-06-05 13:20:34
2023-07-22 23:19:50
2020-01-06 23:17:37
2019-07-17 16:19:04
我搭建的实验环境是CentOS 7.6.1810,听你的在官网用yum安装的最新版OR没用编译安装(编译安装之前问题更多,,)然后nginx -v resty -v 都可以查看到信息,nginx也起来了,浏览网页也能看到OpenResty
启动orange的时候最后一步提示:
[INFO] ORANGE_CONF=/usr/local/orange/conf/orange.conf nginx -p /usr/local/orange -c /usr/local/orange/conf/nginx.conf
nginx: [error] init_by_lua error: init_by_lua:2: module 'orange.orange' not found:
1:我的lua_package_path "$prefix/usr/local/lor/?.lua;;$prefix/usr/local/orange/?.lua;;"; 是这么配置的,我看orange需要lor的支持,这个路径是只需要配置lor的lua路径,还是要把orange lua的路径也写上,就是说以后用的lua不止一个,是一起写在这么。
2:我看他意思是init_by_lua找不到orange.orange,我的是这样的
init_by_lua_block {
local orange = require("orange.orange")
local env_orange_conf = os.getenv("ORANGE_CONF")
print(string.char(27) .. "[34m" .. "[INFO]" .. string.char(27).. "[0m", [[the env[ORANGE_CONF] is ]], env_orange_conf)
-- Here, you can also use the absolute path, eg: local confige_file = "/home/openresty/orange/conf/orange.conf"
local config_file = env_orange_conf or ngx.config.prefix().. "/conf/orange.conf"
local config, store = orange.init({
config = config_file
})
我看你视频里说nginx.conf尽量少配置,我基本没动只改了lua_package_path ,但是orange默认的init_by_lua_block {
local orange = require("orange.orange") 这里面不是一个文件,是orange.orange,他有lua的文件在orange的文件夹下还有个orange文件夹 这里面才有Lua文件 应该是启动文件吧,起不来跟这个 . 有关么。
万分感谢
2019-07-11 16:28:33
Can't locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/opm line 16.
BEGIN failed--compilation aborted at /usr/bin/opm line 16
2019-06-07 22:10:59
2019-06-05 07:45:12