Lapis
被设计于依据不一样环境载入不一样的配置来运行服务器。例如,可能您开发环境的配置设置为本地数据库的URL
,禁用代码缓存和单个worker
。而后,您生产环境的配置可能设定为远程数据库的 URL
,启用代码缓存和8个worker
。 nginx
当启动服务器时,lapis
命令行工具接受第二个参数:shell
$ lapis server [environment]
默认状况下,环境是development
。环境名称仅影响加载的配置。若是你没有任何配置,这绝对没有效果,因此让咱们建立一些。数据库
每当 Lapis
执行依赖于配置的代码时,它会尝试加载 config
模块。 config
模块是咱们定义环境特定的变量的地方。它是一个标准的 Lua/MoonScript
文件,因此让咱们建立它。json
若是未找到 config
模块,则不会抛出错误,此时则会使用默认的配置。api
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" })
配置文件对于访问组合嵌套的表有着不错的语法。 MoonScript
和 Lua
都有本身的变体,有关语法的更多细节,请查看相应的指南。[lua配置语法]()cookie
Nginx
编译 nginx.conf
时使用配置中的值。插入的Nginx配置变量不区分大小写。它们一般以全部大写形式编写,由于在检查配置以前会先检查 shell
的环境是否有值。session
例如,这里有一个 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
和支持库。这里是他们的列表:
port
(number
) - Nginx
的端口,在nginx.conf
中默认定义
num_workers
(number
) - Nginx
启动的work
数,在 nginx.conf
中默认定义
session_name
(string
) - 将存储会话的 cookie
的名称
secret
(string
) - encode_with_secret
使用的秘密密钥,也用于签署会话cookie
measure_performance
(bool
) - 用于启用性能时间和查询跟踪
logging
(table
) - 配置要记录到控制台或日志文件的事件
logging
配置键可用于禁用 Lapis
默认状况下执行的各类日志记录。logging
配置的默认值为:
{ queries = true, requests = true }
全部日志都使用 OpenResty
提供的 print
函数 对 Nginx
的 notice
日志进行记录。默认 notice
日志记录位置设置为 stderr
,在默认的 Lapis Nginx
配置中指定。它可使用 error_log
指令进行配置。
若是 measure_performance
配置值设置为 true
, Lapis
能够收集各类操做的计时和计数。
这些数据存储在 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