OpenResty require 找不到模块
OpenResty require cannot find modules
在 Apache 让我失望之后,我决定走 OpenResty 路线。
到目前为止,Lua 代码正在执行,但是我选择将生成分成多个模块,以使代码更具可读性。
-- Define modules table
local modules = {
head = require("head"),
header = require("scripts.header"),
leftNav = require(".scripts.leftnav")
}
我试过几种要求文件的方法;
- 我已经从 /scripts/ 目录中取出一个文件,并将其移动到根目录,找不到文件
- 我试过提前引用 /scripts/ 目录 with/out
一切都无济于事。根本找不到模块。
我需要什么特殊技巧才能找到这些文件吗?
以下是错误日志的摘录:
stack traceback:
coroutine 0:
[C]: in function 'require'
./html/mailarchive/index.lua:10: in function <./html/mailarchive/index.lua:1>, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost"
2017/05/12 10:26:13 [error] 113864#120792: *14 lua entry thread aborted: runtime error: ./html/mailarchive/index.lua:10: module 'head' not found:
no field package.preload['head']
no file './site/lualib/head.lua'
no file './site/lualib/head/init.lua'
no file './lualib/head.lua'
no file './lualib/head/init.lua'
no file '.\head.lua'
no file 'C:\nginx\lualib\head.lua'
no file 'C:\nginx\lua\head.lua'
no file 'C:\nginx\lua\head\init.lua'
no file 'C:\Program Files (x86)\Lua.1\lua\head.luac'
no file './site/lualib/head.so'
no file './lualib/head.so'
no file '.\head.dll'
no file 'C:\nginx\lualib\head.so'
no file 'C:\nginx\head.dll'
no file 'C:\nginx\loadall.dll'
stack traceback:
coroutine 0:
[C]: in function 'require'
./html/mailarchive/index.lua:10: in function <./html/mailarchive/index.lua:1>, client: 127.0.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/"
经过更多研究,我发现使用 OpenResty 时,句点 (.) 不是指执行脚本所在的当前目录,而是指 nginx 工作的目录 - 在我的案例 C:\nginx.
考虑到这一点,将我的资源定位器更改为:
require(".scripts.head")
require(".scripts.header")
(...)
至
require(".html.mailarchive.scripts.head")
require(".html.mailarchive.scripts.header")
(...)
成功了。
新路径与 C:\nginx\html\mailarchive\scripts\head.lua 等相关
在 Apache 让我失望之后,我决定走 OpenResty 路线。 到目前为止,Lua 代码正在执行,但是我选择将生成分成多个模块,以使代码更具可读性。
-- Define modules table
local modules = {
head = require("head"),
header = require("scripts.header"),
leftNav = require(".scripts.leftnav")
}
我试过几种要求文件的方法; - 我已经从 /scripts/ 目录中取出一个文件,并将其移动到根目录,找不到文件 - 我试过提前引用 /scripts/ 目录 with/out 一切都无济于事。根本找不到模块。
我需要什么特殊技巧才能找到这些文件吗?
以下是错误日志的摘录:
stack traceback:
coroutine 0:
[C]: in function 'require'
./html/mailarchive/index.lua:10: in function <./html/mailarchive/index.lua:1>, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost"
2017/05/12 10:26:13 [error] 113864#120792: *14 lua entry thread aborted: runtime error: ./html/mailarchive/index.lua:10: module 'head' not found:
no field package.preload['head']
no file './site/lualib/head.lua'
no file './site/lualib/head/init.lua'
no file './lualib/head.lua'
no file './lualib/head/init.lua'
no file '.\head.lua'
no file 'C:\nginx\lualib\head.lua'
no file 'C:\nginx\lua\head.lua'
no file 'C:\nginx\lua\head\init.lua'
no file 'C:\Program Files (x86)\Lua.1\lua\head.luac'
no file './site/lualib/head.so'
no file './lualib/head.so'
no file '.\head.dll'
no file 'C:\nginx\lualib\head.so'
no file 'C:\nginx\head.dll'
no file 'C:\nginx\loadall.dll'
stack traceback:
coroutine 0:
[C]: in function 'require'
./html/mailarchive/index.lua:10: in function <./html/mailarchive/index.lua:1>, client: 127.0.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/"
经过更多研究,我发现使用 OpenResty 时,句点 (.) 不是指执行脚本所在的当前目录,而是指 nginx 工作的目录 - 在我的案例 C:\nginx.
考虑到这一点,将我的资源定位器更改为:
require(".scripts.head")
require(".scripts.header")
(...)
至
require(".html.mailarchive.scripts.head")
require(".html.mailarchive.scripts.header")
(...)
成功了。
新路径与 C:\nginx\html\mailarchive\scripts\head.lua 等相关