lapis的配置及環境

配置及環境

Lapis 被設計於依據不一樣環境載入不一樣的配置來運行服務器。例如,可能您開發環境的配置設置爲本地數據庫的URL,禁用代碼緩存和單個worker。而後,您生產環境的配置可能設定爲遠程數據庫的 URL,啓用代碼緩存和8個workernginx

當啓動服務器時,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"
})

配置文件對於訪問組合嵌套的表有着不錯的語法。 MoonScriptLua 都有本身的變體,有關語法的更多細節,請查看相應的指南。[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 和支持庫。這裏是他們的列表:

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
相關文章
相關標籤/搜索