lapis入門

youyu歲月發表於2019-02-16

lapis入門

Lapis 是為 Lua 和 MoonScript 編寫的 Web 框架。 Lapis 很有趣,因為它建立在Nginx 發行的 OpenResty 之上。您的 Web 應用程式直接在 Nginx 內部執行。 Nginx 的事件迴圈允許您使用 OpenResty 提供的模組進行非同步 HTTP 請求,資料庫查詢和其他請求。 Lua 的協程允許你編寫在後臺事件驅動的同步程式碼。除了提供Web框架,Lapis還提供了用於在不同配置環境中控制OpenResty的工具。即使你不想使用Web框架,但如果你使用OpenResty,你也許會發現它依舊是是有用的。

這個 Web 框架實現了 URL 路由器,HTML 模板,CSRF 和會話支援,PostgreSQL 或 MySQL 支援的主動記錄系統,用於處理 model 和開發網站所需的一些其他有用的功能。

本指南希望能夠給大家作為一個教程和參考

基本設定

將OpenResty安裝到系統上。如果你使用Heroku,那麼你可以使用Heroku OpenResty模組和Lua構建包。

使用luarocks來安裝lapis

luarocks install lapis

建立一個應用

lapis 命令列工具

Lapis附帶了一個命令列工具,可幫助您建立新專案和啟動伺服器。要看看Lapis能做什麼,在你的shell中執行lapis help

現在,我們將建立一個新專案。切換到一個乾淨的目錄並執行如下命令:

lua new
wrote   nginx.conf
wrote   mime.types
wrote   app.moon

Lapis編寫一個基本的 Nginx 配置和一個空白 Lapis 應用程式。

隨意檢視生成的配置檔案(nginx.conf是唯一重要的檔案)。以下是它的功能的簡要概述:


任何請求在/static/將提供靜態檔案(如果你要提供這個功能,你可以建立這個目錄)

對/favicon.ico的請求則響應/static/favicon.ico這個檔案

然後所有其他請求將由Lua提供,更具體地說是一個名為“app”的模組


當您使用lapis命令列工具啟動伺服器時,將處理nginx.conf檔案,並使用當前 Lapis 環境中的值填充模板變數。這將在下面更詳細地討論。

nginx 配置

讓我們來看看 lapis new 給我們的配置。雖然沒有必要立即檢視,但如果想要構建更高階的應用程式或者甚至只是想將應用程式部署到生產環境,那麼瞭解它是很重要的。

這裡是生成的nginx.conf

worker_processes ${{NUM_WORKERS}};
error_log stderr notice;
daemon off;

events {
  worker_connections 1024;
}

http {
  include mime.types;

  server {
    listen ${{PORT}};
    lua_code_cache ${{CODE_CACHE}};

    location / {
      default_type text/html;
      content_by_lua `
        require("lapis").serve("app")
      `;
    }

    location /static/ {
      alias static/;
    }

    location /favicon.ico {
      alias static/favicon.ico;
    }
  }
}

首先要注意的是,這不是一個正常的Nginx配置檔案。 Lapis 使用特殊的${{VARIABLE}}語法在啟動伺服器之前注入環境設定。

error_log stderr noticedaemon off讓我們的伺服器在前臺執行,並將日誌列印到控制檯。這對於開發時是很好的,但是在生產時一定要關閉

lua_code_cache 對於開發時也是另一個有用的設定。當設定為 off 時,將導致所有Lua 模組在每個請求時重新載入。對 Web 應用程式的原始碼的修改可以自動過載。在生產環境中,應當啟用(on)快取以獲得最佳效能。預設為off

content_by_lua 指令指定一個 Lua 程式碼塊,它將處理與其他 location 不匹配的任何請求。它載入 Lapis 並告訴它為名為 app 的模組提供服務。之前執行的 lapis new 提供了一個框架模組app來開始

啟動伺服器

雖然可以手動啟動 Nginx ,但是 Lapis 包裝了一個方便的命令去構建配置和啟動伺服器。

shell 中執行 lapis server 將啟動伺服器。 Lapis 將嘗試查詢您的OpenResty安裝。它將搜尋以下目錄中的nginx二進位制檔案。 (最後一個代表你PATH中的任何東西)

"/usr/local/openresty/nginx/sbin/"
"/usr/local/opt/openresty/bin/"
"/usr/sbin/"
""
記住,你需要 OpenResty 而不是正常安裝 Nginx。 Lapis 將忽略常規的 Nginx 二進位制檔案。

請繼續並啟動伺服器,看看它是什麼樣子:
lapis server

預設配置將伺服器置於前臺執行,使用CTRL + C停止伺服器。
如果伺服器在後臺執行,可以使用 lapis term 停止。它必須在應用程式的根目錄中執行。此命令查詢正在執行的伺服器的PID檔案,並向該程式傳送 TERM 訊息(如果存在)

建立一個應用

現在你知道如何生成一個新專案並啟動和停止伺服器,你已經準備好開始編寫應用程式程式碼。本指南分為 MoonScriptLua 兩個。

如果你不確定要使用什麼,我建議通過兩個路徑閱讀。

Create an application with Lua
Create an application with MoonScript