Lua-Webプログラミング

Luaは非常に柔軟な言語であり、Webアプリケーションを含む複数のプラットフォームでよく使用されます。LuaでオープンソースのWebコンポーネントを提供するために2004年に形成されたKeplerコミュニティ。

Luaを使用して開発された他のWebフレームワークがありますが、主にKeplerコミュニティによって提供されるコンポーネントに焦点を当てます。

アプリケーションとフレームワーク

  • Orbit は、WSAPIに基づくLua用のMVCWebフレームワークです。

  • WSAPI Lua WebアプリケーションからWebホストサーバーを抽象化するAPIであり、多くのプロジェクトのベースです。

  • Xavante WSAPIインターフェースを提供するLuaWebサーバーです。

  • Sputnik は、ユーモアと娯楽に使用されるケプラープロジェクトのWSAPI上で開発されたwiki / CMSです。

  • CGILuaWSAPIに基づいたLuaPagesおよびLuaScriptsWebページの作成を提供しますが、サポートされなくなりました。代わりに、Orbit、Sputnik、またはWSAPIを使用してください。

このチュートリアルでは、Luaで何ができるかを理解し、そのインストールと使用法について詳しく知るために、ウェブサイトのkeplerを参照してください。

軌道

Orbitは、Lua用のMVCWebフレームワークです。「スクリプト」のCGILuaモデルを完全に廃止し、各Orbitアプリケーションを1つのファイルに収めることができるアプリケーションを優先しますが、必要に応じて複数のファイルに分割することもできます。

すべてのOrbitアプリケーションはWSAPIプロトコルに準拠しているため、現在Xavante、CGI、およびFastcgiで動作します。これには、開発用のXavanteインスタンスを簡単に起動できるランチャーが含まれています。

Orbitをインストールする最も簡単な方法は、LuaRocksを使用することです。Luarocks install orbitは、インストールするためのコマンドです。このためには、最初にLuaRocksをインストールする必要があります。

すべての依存関係をインストールしていない場合は、Unix / Linux環境でOrbitをセットアップするための手順を次に示します。

Apacheのインストール

サーバーに接続します。Apache2とそのサポートモジュールをインストールし、-を使用して必要なApache2モジュールを有効にします。

$ sudo apt-get install apache2 libapache2-mod-fcgid libfcgi-dev build-essential
$ sudo a2enmod rewrite
$ sudo a2enmod fcgid
$ sudo /etc/init.d/apache2 force-reload

LuaRocksをインストールします

$ sudo apt-get install luarocks

WSAPI、FCGI、Orbit、およびXavanteをインストールします

$ sudo luarocks install orbit
$ sudo luarocks install wsapi-xavante
$ sudo luarocks install wsapi-fcgi

Apache2のセットアップ

$ sudo raj /etc/apache2/sites-available/default

設定ファイルの<Directory / var / www />セクションの下に次のセクションを追加します。このセクションに「AllowOverrideNone」がある場合は、「None」を「All」に変更して、.htaccessファイルがローカルで構成をオーバーライドできるようにする必要があります。

<IfModule mod_fcgid.c>

   AddHandler fcgid-script .lua
   AddHandler fcgid-script .ws
   AddHandler fcgid-script .op
	
   FCGIWrapper "/usr/local/bin/wsapi.fcgi" .ws
   FCGIWrapper "/usr/local/bin/wsapi.fcgi" .lua
   FCGIWrapper "/usr/local/bin/op.fcgi" .op
	
   #FCGIServer "/usr/local/bin/wsapi.fcgi" -idle-timeout 60 -processes 1
   #IdleTimeout 60
   #ProcessLifeTime 60
	
</IfModule>

サーバーを再起動して、行った変更が有効になるようにします。

アプリケーションを有効にするには、Orbitアプリケーションのルートにある.htaccessファイル(この場合は/ var / www)に+ ExecCGIを追加する必要があります。

Options +ExecCGI
DirectoryIndex index.ws

簡単な例-軌道

#!/usr/bin/env index.lua

-- index.lua
require"orbit"

-- declaration
module("myorbit", package.seeall, orbit.new)

-- handler

function index(web)
   return my_home_page()
end

-- dispatch
myorbit:dispatch_get(index, "/", "/index")

-- Sample page

function my_home_page()

   return [[
      <head></head>
      <html>
         <h2>First Page</h2>
      </html>
   ]]
	
end

これで、Webブラウザを起動できるようになります。http:// localhost:8080 /にアクセスすると、次の出力が表示されます。

First Page

Orbitは別のオプションを提供します。つまり、Luaコードはhtmlを生成できます。

#!/usr/bin/env index.lua

-- index.lua
require"orbit"

function generate()
   return html {
      head{title "HTML Example"},
		
      body{
         h2{"Here we go again!"}
      }
   }
end

orbit.htmlify(generate)

print(generate())

フォームの作成

簡単なフォームの例を以下に示します-

#!/usr/bin/env index.lua
require"orbit"

function wrap (inner)
   return html{ head(), body(inner) }
end

function test ()
   return wrap(form (H'table' {
      tr{td"First name",td( input{type = 'text', name='first'})},
      tr{td"Second name",td(input{type = 'text', name='second'})},
      tr{ td(input{type = 'submit', value = 'Submit!'}),
         td(input{type = 'submit',value = 'Cancel'})
      },
   }))
end

orbit.htmlify(wrap,test)

print(test())

WSAPI

前述のように、WSAPIは多くのプロジェクトのベースとして機能し、複数の機能が組み込まれています。WSAPIを使用して、次のプラットフォームをサポートできます。

  • Windows
  • UNIXベースのシステム

WSAPIでサポートされているサーバーとインターフェイスには、次のものが含まれます。

  • CGI
  • FastCGI
  • Xavante

WSAPIは多くのライブラリを提供しているため、Luaを使用したWebプログラミングが容易になります。Luaでサポートされている機能には、次のものがあります。

  • リクエスト処理
  • 出力バッファリング
  • Authentication
  • ファイルのアップロード
  • 分離を要求する
  • Multiplexing

WSAPIの簡単な例を以下に示します-

#!/usr/bin/env wsapi.cgi

module(..., package.seeall)
function run(wsapi_env)
   local headers = { ["Content-type"] = "text/html" }
   
   local function hello_text()
      coroutine.yield("<html><body>")
      coroutine.yield("<p>Hello Wsapi!</p>")
      coroutine.yield("<p>PATH_INFO: " .. wsapi_env.PATH_INFO .. "</p>")
      coroutine.yield("<p>SCRIPT_NAME: " .. wsapi_env.SCRIPT_NAME .. "</p>")
      coroutine.yield("</body></html>")
   end

   return 200, headers, coroutine.wrap(hello_text)
end

上記のコードで、単純なhtmlページが形成されて返されることがわかります。ステートメントごとに呼び出し元の関数に戻すことを可能にするコルーチンの使用法を確認できます。最後に、htmlステータスコード(200)、ヘッダー、およびhtmlページが返されます。

シャバンテ

Xavanteは、URIマップハンドラーに基づくモジュラーアーキテクチャを使用するLua HTTP 1.1Webサーバーです。Xavanteは現在、

  • ファイルハンドラ
  • リダイレクトハンドラ
  • WSAPIハンドラー

ファイルハンドラーは、一般的なファイルに使用されます。リダイレクトハンドラーは、WSAPIアプリケーションで処理するためのURI再マッピングとWSAPIハンドラーを有効にします。

簡単な例を以下に示します。

require "xavante.filehandler"
require "xavante.cgiluahandler"
require "xavante.redirecthandler"

-- Define here where Xavante HTTP documents scripts are located
local webDir = XAVANTE_WEB

local simplerules = {

   { -- URI remapping example
      match = "^[^%./]*/$",
      with = xavante.redirecthandler,
      params = {"index.lp"}
   }, 

   { -- cgiluahandler example
      match = {"%.lp$", "%.lp/.*$", "%.lua$", "%.lua/.*$" },
      with = xavante.cgiluahandler.makeHandler (webDir)
   },
    
   { -- filehandler example
      match = ".",
      with = xavante.filehandler,
      params = {baseDir = webDir}
   },
} 

xavante.HTTP{
   server = {host = "*", port = 8080},
    
   defaultHost = {
      rules = simplerules
   },
}

Xavanteで仮想ホストを使用するには、xavante.HTTPの呼び出しを次のように変更します-

xavante.HTTP{
   server = {host = "*", port = 8080},
    
   defaultHost = {},
    
   virtualhosts = {
      ["www.sitename.com"] = simplerules
   }
}

LuaWebコンポーネント

  • Copas、TCP / IPサーバーで使用できるコルーチンに基づくディスパッチャー。

  • Cosmo、テンプレート内の任意のコードからアプリケーションを保護する「安全なテンプレート」エンジン。

  • Coxpcall Luaネイティブpcallとxpcallをコルーチン互換のものでカプセル化します。

  • LuaFileSystem、基になるディレクトリ構造とファイル属性にアクセスするためのポータブルな方法。

  • Rings、Lua内から新しいLua状態を作成する方法を提供するライブラリ。

エンディングノート

私たちが利用できるLuaベースのWebフレームワークとコンポーネントは非常に多く、必要に応じて選択できます。以下を含む利用可能な他のWebフレームワークがあります-

  • MoonstalkLua言語で構築された動的に生成されたWebベースのプロジェクトの効率的な開発とホスティングを可能にします。基本的なページから複雑なアプリケーションまで。

  • Lapis、OpenRestyと呼ばれるNginxのカスタマイズされたバージョンの内部で実行されるMoonScript(またはLua)を使用してWebアプリケーションを構築するためのフレームワーク。

  • Lua Server Pages、組み込みWeb開発への他のアプローチを吹き飛ばすLuaスクリプトエンジンプラグインは、従来のCサーバーページへの劇的なショートカットを提供します。

これらのWebフレームワークは、Webアプリケーションを活用して、強力な操作を行うのに役立ちます。