Lua-web-programming
Lua-Webプログラミング
Luaは柔軟性の高い言語であり、多くの場合、Webアプリケーションを含む複数のプラットフォームで使用されます。 LuaでオープンソースWebコンポーネントを提供するために2004年に形成されたKeplerコミュニティ。
Luaを使用して開発されたWebフレームワークは他にもありますが、主にKeplerコミュニティが提供するコンポーネントに焦点を当てます。
アプリケーションとフレームワーク
- Orbit は、WSAPIに基づいたLua用のMVC Webフレームワークです。
- WSAPI は、Lua WebアプリケーションからWebホストサーバーを抽象化するAPIであり、多くのプロジェクトのベースです。
- Xavante は、WSAPIインターフェースを提供するLua Webサーバーです。
- Sputnik は、ユーモアとエンターテイメントに使用されるKeplerプロジェクトでWSAPIを使用して開発されたwiki/CMSです。
- CGILua は、WSAPIに基づいたLuaPagesおよびLuaScriptsのWebページ作成を提供しますが、サポートされなくなりました。 代わりに、Orbit、Sputnik、またはWSAPIを使用してください。
このチュートリアルでは、Luaでできることを理解し、そのインストールと使用方法について詳しく知るために、ウェブサイトのkeplerを参照します。
軌道
Orbitは、Lua用のMVC Webフレームワークです。 各スクリプトは単一のファイルに収めることができますが、必要に応じて複数のファイルに分割できます。
すべてのOrbitアプリケーションはWSAPIプロトコルに準拠しているため、現在はXavante、CGI、およびFastcgiで動作します。 開発用にXavanteインスタンスを簡単に起動できるランチャーが含まれています。
Orbitをインストールする最も簡単な方法は、LuaRocksを使用することです。 Luarocks install orbitは、インストール用のコマンドです。 このためには、最初にhttp://luarocks.org/en/Download[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/>セクションの下に、この次のセクションを追加します。 このセクションに「AllowOverride None」がある場合は、「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
orbitlify(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
orbitlify(wrap,test)
print(test())
WSAPI
前述のように、WSAPIは多くのプロジェクトのベースとして機能し、複数の機能が組み込まれています。 WSAPIを使用して、次のプラットフォームをサポートできます。
- Windows
- UNIXベースのシステム
WSAPIがサポートするサーバーとインターフェースには、
- CGI
- FastCGI
- ザバンテ
WSAPIは多くのライブラリを提供します。これにより、Luaを使用したWebプログラミングが容易になります。 Luaでサポートされている機能の一部には、
- リクエスト処理
- 出力バッファリング
- 認証
- ファイルのアップロード
- リクエストの分離
- 多重化
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.1 Webサーバーです。 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
}
}
Lua Webコンポーネント
- Copas 、TCP/IPサーバーで使用できるコルーチンに基づくディスパッチャー。
- Cosmo 、テンプレート内の任意のコードからアプリケーションを保護する「安全なテンプレート」エンジン。
- Coxpcall は、Luaネイティブのpcallとxpcallをコルーチンと互換性のあるものでカプセル化します。
- LuaFileSystem 、基礎となるディレクトリ構造とファイル属性にアクセスするためのポータブルな方法。
- リング、Lua内から新しいLua状態を作成する方法を提供するライブラリ。
エンディングノート
非常に多くのLuaベースのWebフレームワークとコンポーネントが利用可能であり、必要に応じて選択できます。 以下を含む利用可能な他のWebフレームワークがあります-
- Moonstalk は、Lua言語で構築された動的に生成されたWebベースのプロジェクトの効率的な開発とホスティングを可能にします。基本的なページから複雑なアプリケーションまで。
- Lapis 、MoonScript(またはLua)を使用してWebアプリケーションを構築するためのフレームワーク。OpenRestyと呼ばれるNginxのカスタマイズバージョン内で実行されます。
- Lua Server Pages は、組み込みWeb開発への他のアプローチを吹き飛ばすLuaスクリプトエンジンプラグインで、従来のCサーバーページに劇的なショートカットを提供します。
これらのWebフレームワークは、Webアプリケーションを活用して、強力な操作を行うのに役立ちます。