资讯专栏INFORMATION COLUMN

lapis的配置及环境

sarva / 1570人阅读

摘要:配置及环境被设计于依据不同环境载入不同的配置来运行服务器。环境名称仅影响加载的配置。例如,这里有一个的配置块编译时,首先检查环境变量。默认日志记录位置设置为,在默认的配置中指定。

配置及环境

Lapis 被设计于依据不同环境载入不同的配置来运行服务器。例如,可能您开发环境的配置设置为本地数据库的URL,禁用代码缓存和单个worker。然后,您生产环境的配置可能设定为远程数据库的 URL,启用代码缓存和8个worker

当启动服务器时,lapis 命令行工具接受第二个参数:

$ lapis server [environment] 

默认情况下,环境是development。环境名称仅影响加载的配置。如果你没有任何配置,这绝对没有效果,所以让我们创建一些。

创建配置

每当 Lapis 执行依赖于配置的代码时,它会尝试加载 config 模块。 config 模块是我们定义环境特定的变量的地方。它是一个标准的 Lua/MoonScript 文件,所以让我们创建它。

如果未找到 config 模块,则不会抛出错误,此时则会使用默认的配置。

local config = require("lapis.config")

config("development", {
  port = 8080
})

config("production", {
  port = 80,
  num_workers = 4,
  code_cache = "on"
})

我们使用 lapis.config 中提供的配置助手来创建我们的配置。在上面的例子中,我们定义了两个配置,并为每个配置设置端口。

配置只是一个简单的表。使用上面的特殊构建器语法构建配置表。

我们可以通过传递环境名称的数组表 来一次 配置多个环境:

config({"development", "production"}, {
  session_name = "my_app_session"
})

配置文件对于访问组合嵌套的表有着不错的语法。 MoonScriptLua 都有自己的变体,有关语法的更多细节,请查看相应的指南。[lua配置语法]()

配置和Nginx

编译 nginx.conf 时使用配置中的值。插入的Nginx配置变量不区分大小写。它们通常以所有大写形式编写,因为在检查配置之前会先检查 shell 的环境是否有值。

例如,这里有一个 Lapis Nginx 的配置块:

events {
  worker_connections ${{WORKER_CONNECTIONS}};
}

编译时,首先检查环境变量 LAPIS_WORKER_CONNECTIONS。如果它没有值,那么将检查当前环境的配置的 worker_connections

在应用程序中访问配置

该配置也可在应用程序中使用。我们可以像下面这样来访问配置表:

local config = require("lapis.config").get()
print(config.port) 

当前环境的名称存储在 _name 中。

print(config._name) -- development, production, etc...
默认配置

所有配置都有一些默认值,下面这些是他们在表中的语法:

default_config = {
  port = "8080",
  secret = "please-change-me",
  session_name = "lapis_session",
  num_workers = "1",
  logging = {
    queries = true,
    requests = true
  }
}
可用配置

虽然大多数配置键是随意使用的,但是有一些名称是被保留用于配置 Lapis 和支持库。这里是他们的列表:

portnumber) - Nginx 的端口,在nginx.conf 中默认定义

num_workersnumber) - Nginx 启动的work数,在 nginx.conf 中默认定义

session_namestring) - 将存储会话的 cookie 的名称

secretstring) - encode_with_secret使用的秘密密钥,也用于签署会话
cookie

measure_performancebool) - 用于启用性能时间和查询跟踪

loggingtable) - 配置要记录到控制台或日志文件的事件

配置日志

logging 配置键可用于禁用 Lapis 默认情况下执行的各种日志记录。logging配置的默认值为:

{
  queries = true,
  requests = true
}

所有日志都使用 OpenResty 提供的 print 函数 对 Nginxnotice 日志进行记录。默认 notice 日志记录位置设置为 stderr ,在默认的 Lapis Nginx 配置中指定。它可以使用 error_log 指令进行配置。

性能测量

如果 measure_performance 配置值设置为 trueLapis 可以收集各种操作的计时和计数。

这些数据存储在 ngx.ctx.performance 中。在以下字段将被收集到表中:

view_time - 呈现视图所用的时间(以秒为单位)

layout_time - 呈现布局所用的时间(以秒为单位)

db_time - 执行查询所花费的时间(以秒为单位)

db_count - 执行的查询数

http_time - 执行 HTTP 请求所花费的时间(以秒为单位)

http_count - 发送的 HTTP 请求数

如果在请求中未执行相应的操作,则字段将为 nil。这些字段在请求过程中填写,因此最好只在请求结束时访问它们,以确保所有数据可用。 after_dispatch 助手可以用来注册一个函数,以便在请求处理的最后阶段运行。

在此示例中,性能数据在每个请求结束时打印到日志中:

local lapis = require("lapis")
local after_dispatch = require("lapis.nginx.context").after_dispatch
local to_json = require("lapis.util").to_json

local config = require("lapis.config")

config("development", {
  measure_performance = true
})


local app = lapis.Application()

app:before_filter(function(self)
  after_dispatch(function()
    print(to_json(ngx.ctx.performance))
  end)
end)

-- ...

return app

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39494.html

相关文章

  • lapis入门

    摘要:入门是为和编写的框架。使用来安装创建一个应用命令行工具附带了一个命令行工具,可帮助您创建新项目和启动服务器。在生产环境中,应当启用缓存以获得最佳性能。指令指定一个代码块,它将处理与其他不匹配的任何请求。将忽略常规的二进制文件。 lapis入门 Lapis 是为 Lua 和 MoonScript 编写的 Web 框架。 Lapis 很有趣,因为它建立在Nginx 发行的 OpenRest...

    endless_road 评论0 收藏0
  • 创建Lapis应用程序

    摘要:使用创建应用程序生成一个新项目如果您尚未阅读,请阅读入门指南,了解有关创建新项目骨架的信息以及,配置和命令的详细信息。是包含应用程序的常规模块。 使用Lua创建Lapis应用程序 生成一个新项目 如果您尚未阅读,请阅读入门指南,了解有关创建新项目骨架的信息以及OpenResty,Nginx配置和lapis命令的详细信息。 您可以在当前目录中通过运行以下命令启动一个新的Lua项目: la...

    jzzlee 评论0 收藏0
  • lapis请求处理

    摘要:处理函数的返回值用于渲染输出。例如,如果不满足某些条件,我们可以取消操作并重定向到另一个页面是处理一个常规动作的返回值,所以同样的事情你可以返回一个动作,可以传递给请求对象每个操作在调用时会请求对象作为其第一个参数传递。 lapis请求处理 每个被Lapis处理的HTTP请求在被Nginx处理后都遵循相同的基本流程。第一步是路由。路由是 url 必须匹配的模式。当你定义一个路由时,你也...

    Olivia 评论0 收藏0
  • lapis配置之 lua语法

    摘要:配置语法配置示例的配置模块提供了对递归合并的支持。例如,我们可以定义一个基本配置,然后覆盖更多具体的配置声明中的一些值这将产生以下两个配置结果默认值省略您可以在相同的配置名称上调用函数多次,每次将传入的表合并到配置中。 Lua 配置语法 配置示例 Lapis 的配置模块提供了对递归合并 table 的支持。 例如,我们可以定义一个基本配置,然后覆盖更多具体的配置声明中的一些值: --...

    BaronZhang 评论0 收藏0
  • lapis异常处理

    摘要:的异常处理错误的种类区分两种错误可恢复和不可恢复错误。捕获可恢复的错误帮助程序用于包装一个操作,以便它可以捕获错误并运行错误处理程序。相反,使用协同程序创建一个异常处理系统。 lapis的异常处理 错误的种类 Lapis 区分两种错误:可恢复和不可恢复错误。 Lua 的运行时在执行期间抛出的错误或调用错误被认为是不可恢复的。 (这也包括 Lua 内置函数 assert ) 因为不可恢复...

    cucumber 评论0 收藏0

发表评论

0条评论

sarva

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<