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