lighty 的生活

lighty 开发者博客

周末项目:Lua 作为配置语言

随着 mod_cml 的首次实现以及后来的 mod_magnet,聪明的用户问我们为什么不也将 Lua 用作 lighttpd 的配置语言。

到目前为止,我一直持反对意见,认为配置文件的大幅改动会让升级者非常不高兴,因为他们必须重写配置文件。然而,看看我们目前为 1.5.0 所做的工作,我们无论如何都需要进行调整。

当你把一件事拆开时,这种情况总是会发生:你会看到更多需要清理的东西。我的初步实验已经完成了一部分。

server = {
        name = "my.example.org",
        modules = {
                "mod_indexfile"
        },
        ["errorfile-prefix"] = "foobar",
}

sockets = {
        [":80"] = {
                server = { name = "foo.example.org" },
                HTTP = { url = function(url)
                        if url == "foo" then
                                server.name = "baz.example.org"
                        end
                end },
        }
}

sockets[":80"].HTTP.url("foo")
print(server.name)

这是一个初步的想法。它展示了 LUA 语法与我们当前的配置语法并没有那么大的不同。

  • 全局变量,现在仍保持为全局。
  • socket 条件现在是一个简单的 socket 数组
  • 条件是函数,现在你可以随心所欲地使用它们

我希望我能将完整的配置语法整合到这个结构中。目前来看,这比拆开旧的配置解析器代码并将其转换为 glib-notation 更具吸引力。有了所有的条件和类型,我们基本上已经实现了自己的脚本语言。

让我们看看这会走向何方。