摘要:配置及環(huán)境被設(shè)計(jì)于依據(jù)不同環(huán)境載入不同的配置來運(yùn)行服務(wù)器。環(huán)境名稱僅影響加載的配置。例如,這里有一個(gè)的配置塊編譯時(shí),首先檢查環(huán)境變量。默認(rèn)日志記錄位置設(shè)置為,在默認(rèn)的配置中指定。
配置及環(huán)境
Lapis 被設(shè)計(jì)于依據(jù)不同環(huán)境載入不同的配置來運(yùn)行服務(wù)器。例如,可能您開發(fā)環(huán)境的配置設(shè)置為本地?cái)?shù)據(jù)庫的URL,禁用代碼緩存和單個(gè)worker。然后,您生產(chǎn)環(huán)境的配置可能設(shè)定為遠(yuǎn)程數(shù)據(jù)庫的 URL,啟用代碼緩存和8個(gè)worker。
當(dāng)啟動(dòng)服務(wù)器時(shí),lapis 命令行工具接受第二個(gè)參數(shù):
$ lapis server [environment]
默認(rèn)情況下,環(huán)境是development。環(huán)境名稱僅影響加載的配置。如果你沒有任何配置,這絕對沒有效果,所以讓我們創(chuàng)建一些。
創(chuàng)建配置每當(dāng) Lapis 執(zhí)行依賴于配置的代碼時(shí),它會(huì)嘗試加載 config 模塊。 config 模塊是我們定義環(huán)境特定的變量的地方。它是一個(gè)標(biāo)準(zhǔn)的 Lua/MoonScript 文件,所以讓我們創(chuàng)建它。
如果未找到 config 模塊,則不會(huì)拋出錯(cuò)誤,此時(shí)則會(huì)使用默認(rèn)的配置。
local config = require("lapis.config") config("development", { port = 8080 }) config("production", { port = 80, num_workers = 4, code_cache = "on" })
我們使用 lapis.config 中提供的配置助手來創(chuàng)建我們的配置。在上面的例子中,我們定義了兩個(gè)配置,并為每個(gè)配置設(shè)置端口。
配置只是一個(gè)簡單的表。使用上面的特殊構(gòu)建器語法構(gòu)建配置表。
我們可以通過傳遞環(huán)境名稱的數(shù)組表 來一次 配置多個(gè)環(huán)境:
config({"development", "production"}, { session_name = "my_app_session" })
配置文件對于訪問組合嵌套的表有著不錯(cuò)的語法。 MoonScript 和 Lua 都有自己的變體,有關(guān)語法的更多細(xì)節(jié),請查看相應(yīng)的指南。[lua配置語法]()
配置和Nginx編譯 nginx.conf 時(shí)使用配置中的值。插入的Nginx配置變量不區(qū)分大小寫。它們通常以所有大寫形式編寫,因?yàn)樵跈z查配置之前會(huì)先檢查 shell 的環(huán)境是否有值。
例如,這里有一個(gè) Lapis Nginx 的配置塊:
events { worker_connections ${{WORKER_CONNECTIONS}}; }
編譯時(shí),首先檢查環(huán)境變量 LAPIS_WORKER_CONNECTIONS。如果它沒有值,那么將檢查當(dāng)前環(huán)境的配置的 worker_connections。
在應(yīng)用程序中訪問配置該配置也可在應(yīng)用程序中使用。我們可以像下面這樣來訪問配置表:
local config = require("lapis.config").get() print(config.port)
當(dāng)前環(huán)境的名稱存儲(chǔ)在 _name 中。
print(config._name) -- development, production, etc...默認(rèn)配置
所有配置都有一些默認(rèn)值,下面這些是他們在表中的語法:
default_config = { port = "8080", secret = "please-change-me", session_name = "lapis_session", num_workers = "1", logging = { queries = true, requests = true } }可用配置
雖然大多數(shù)配置鍵是隨意使用的,但是有一些名稱是被保留用于配置 Lapis 和支持庫。這里是他們的列表:
port(number) - Nginx 的端口,在nginx.conf 中默認(rèn)定義
num_workers(number) - Nginx 啟動(dòng)的work數(shù),在 nginx.conf 中默認(rèn)定義
session_name(string) - 將存儲(chǔ)會(huì)話的 cookie 的名稱
secret(string) - encode_with_secret使用的秘密密鑰,也用于簽署會(huì)話
cookie
measure_performance(bool) - 用于啟用性能時(shí)間和查詢跟蹤
logging(table) - 配置要記錄到控制臺(tái)或日志文件的事件
配置日志logging 配置鍵可用于禁用 Lapis 默認(rèn)情況下執(zhí)行的各種日志記錄。logging配置的默認(rèn)值為:
{ queries = true, requests = true }
所有日志都使用 OpenResty 提供的 print 函數(shù) 對 Nginx 的 notice 日志進(jìn)行記錄。默認(rèn) notice 日志記錄位置設(shè)置為 stderr ,在默認(rèn)的 Lapis Nginx 配置中指定。它可以使用 error_log 指令進(jìn)行配置。
性能測量如果 measure_performance 配置值設(shè)置為 true, Lapis 可以收集各種操作的計(jì)時(shí)和計(jì)數(shù)。
這些數(shù)據(jù)存儲(chǔ)在 ngx.ctx.performance 中。在以下字段將被收集到表中:
view_time - 呈現(xiàn)視圖所用的時(shí)間(以秒為單位)
layout_time - 呈現(xiàn)布局所用的時(shí)間(以秒為單位)
db_time - 執(zhí)行查詢所花費(fèi)的時(shí)間(以秒為單位)
db_count - 執(zhí)行的查詢數(shù)
http_time - 執(zhí)行 HTTP 請求所花費(fèi)的時(shí)間(以秒為單位)
http_count - 發(fā)送的 HTTP 請求數(shù)
如果在請求中未執(zhí)行相應(yīng)的操作,則字段將為 nil。這些字段在請求過程中填寫,因此最好只在請求結(jié)束時(shí)訪問它們,以確保所有數(shù)據(jù)可用。 after_dispatch 助手可以用來注冊一個(gè)函數(shù),以便在請求處理的最后階段運(yùn)行。
在此示例中,性能數(shù)據(jù)在每個(gè)請求結(jié)束時(shí)打印到日志中:
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
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/39494.html
摘要:入門是為和編寫的框架。使用來安裝創(chuàng)建一個(gè)應(yīng)用命令行工具附帶了一個(gè)命令行工具,可幫助您創(chuàng)建新項(xiàng)目和啟動(dòng)服務(wù)器。在生產(chǎn)環(huán)境中,應(yīng)當(dāng)啟用緩存以獲得最佳性能。指令指定一個(gè)代碼塊,它將處理與其他不匹配的任何請求。將忽略常規(guī)的二進(jìn)制文件。 lapis入門 Lapis 是為 Lua 和 MoonScript 編寫的 Web 框架。 Lapis 很有趣,因?yàn)樗⒃贜ginx 發(fā)行的 OpenRest...
摘要:使用創(chuàng)建應(yīng)用程序生成一個(gè)新項(xiàng)目如果您尚未閱讀,請閱讀入門指南,了解有關(guān)創(chuàng)建新項(xiàng)目骨架的信息以及,配置和命令的詳細(xì)信息。是包含應(yīng)用程序的常規(guī)模塊。 使用Lua創(chuàng)建Lapis應(yīng)用程序 生成一個(gè)新項(xiàng)目 如果您尚未閱讀,請閱讀入門指南,了解有關(guān)創(chuàng)建新項(xiàng)目骨架的信息以及OpenResty,Nginx配置和lapis命令的詳細(xì)信息。 您可以在當(dāng)前目錄中通過運(yùn)行以下命令啟動(dòng)一個(gè)新的Lua項(xiàng)目: la...
摘要:處理函數(shù)的返回值用于渲染輸出。例如,如果不滿足某些條件,我們可以取消操作并重定向到另一個(gè)頁面是處理一個(gè)常規(guī)動(dòng)作的返回值,所以同樣的事情你可以返回一個(gè)動(dòng)作,可以傳遞給請求對象每個(gè)操作在調(diào)用時(shí)會(huì)請求對象作為其第一個(gè)參數(shù)傳遞。 lapis請求處理 每個(gè)被Lapis處理的HTTP請求在被Nginx處理后都遵循相同的基本流程。第一步是路由。路由是 url 必須匹配的模式。當(dāng)你定義一個(gè)路由時(shí),你也...
摘要:配置語法配置示例的配置模塊提供了對遞歸合并的支持。例如,我們可以定義一個(gè)基本配置,然后覆蓋更多具體的配置聲明中的一些值這將產(chǎn)生以下兩個(gè)配置結(jié)果默認(rèn)值省略您可以在相同的配置名稱上調(diào)用函數(shù)多次,每次將傳入的表合并到配置中。 Lua 配置語法 配置示例 Lapis 的配置模塊提供了對遞歸合并 table 的支持。 例如,我們可以定義一個(gè)基本配置,然后覆蓋更多具體的配置聲明中的一些值: --...
摘要:的異常處理錯(cuò)誤的種類區(qū)分兩種錯(cuò)誤可恢復(fù)和不可恢復(fù)錯(cuò)誤。捕獲可恢復(fù)的錯(cuò)誤幫助程序用于包裝一個(gè)操作,以便它可以捕獲錯(cuò)誤并運(yùn)行錯(cuò)誤處理程序。相反,使用協(xié)同程序創(chuàng)建一個(gè)異常處理系統(tǒng)。 lapis的異常處理 錯(cuò)誤的種類 Lapis 區(qū)分兩種錯(cuò)誤:可恢復(fù)和不可恢復(fù)錯(cuò)誤。 Lua 的運(yùn)行時(shí)在執(zhí)行期間拋出的錯(cuò)誤或調(diào)用錯(cuò)誤被認(rèn)為是不可恢復(fù)的。 (這也包括 Lua 內(nèi)置函數(shù) assert ) 因?yàn)椴豢苫謴?fù)...
閱讀 982·2023-04-26 01:47
閱讀 1672·2021-11-18 13:19
閱讀 2042·2019-08-30 15:44
閱讀 645·2019-08-30 15:44
閱讀 2291·2019-08-30 15:44
閱讀 1232·2019-08-30 14:06
閱讀 1420·2019-08-30 12:59
閱讀 1900·2019-08-29 12:49