Lua - веб-программирование
Lua - очень гибкий язык, и он часто используется на нескольких платформах, включая веб-приложения. Сообщество Kepler, которое было сформировано в 2004 году для предоставления веб-компонентов с открытым исходным кодом на Lua.
Несмотря на то, что существуют и другие веб-фреймворки, использующие Lua, мы в первую очередь сосредоточимся на компонентах, предоставляемых сообществом Kepler.
Приложения и фреймворки
Orbit - это веб-фреймворк MVC для Lua, основанный на WSAPI.
WSAPI - это API, который отделяет сервер веб-хоста от веб-приложений Lua и является основой для многих проектов.
Xavante это веб-сервер Lua, который предлагает интерфейс WSAPI.
Sputnik это вики / CMS, разработанная на основе WSAPI для проекта Kepler, используемая для юмора и развлечений.
CGILuaпредлагает создание веб-страниц LuaPages и LuaScripts на основе WSAPI, но больше не поддерживается. Вместо этого используйте Orbit, Sputnik или WSAPI.
В этом руководстве мы постараемся дать вам понять, что может делать Lua, и узнать больше о его установке и использовании, обратитесь к веб-сайту kepler.
Орбита
Orbit - это веб-фреймворк MVC для Lua. Он полностью отказывается от модели «сценариев» CGILua в пользу приложений, где каждое приложение Orbit может поместиться в один файл, но вы можете разделить его на несколько файлов, если хотите.
Все приложения Orbit следуют протоколу WSAPI, поэтому в настоящее время они работают с Xavante, CGI и Fastcgi. Он включает в себя средство запуска, которое упрощает запуск экземпляра Xavante для разработки.
Самый простой способ установить Orbit - использовать LuaRocks. Luarocks install orbit - это команда для установки. Для этого вам необходимо сначала установить LuaRocks .
Если вы не установили все зависимости, вот шаги, которые необходимо выполнить для настройки Orbit в среде Unix / Linux.
Установка 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>
Перезагрузите сервер, чтобы внесенные изменения вступили в силу.
Чтобы включить ваше приложение, вам необходимо добавить + ExecCGI в файл .htaccess в корне вашего приложения Orbit - в данном случае / var / www.
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
Теперь у вас должна быть возможность запустить свой веб-браузер. Перейдите по адресу 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. Некоторые из поддерживаемых функций в 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
Xavante - это веб-сервер Lua HTTP 1.1, который использует модульную архитектуру, основанную на обработчиках с отображением URI. В настоящее время Хаванте предлагает,
- Обработчик файлов
- Обработчик перенаправления
- Обработчик WSAPI
Обработчик файлов используется для общих файлов. Обработчик перенаправления включает переназначение URI и обработчик WSAPI для работы с приложениями 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
Copas, диспетчер на основе сопрограмм, которые могут использоваться серверами TCP / IP.
Cosmo, механизм «безопасных шаблонов», который защищает ваше приложение от произвольного кода в шаблонах.
Coxpcall инкапсулирует родные Lua pcall и xpcall с сопрограммами, совместимыми с ними.
LuaFileSystem, переносимый способ доступа к базовой структуре каталогов и атрибутам файлов.
Rings, библиотека, которая позволяет создавать новые состояния Lua из Lua.
Конечная записка
Для нас доступно так много веб-фреймворков и компонентов на основе Lua, и в зависимости от потребности их можно выбрать. Доступны и другие веб-фреймворки, которые включают следующее:
Moonstalkобеспечивает эффективную разработку и размещение динамически генерируемых веб-проектов, построенных с помощью языка Lua; от простых страниц до сложных приложений.
Lapis, фреймворк для создания веб-приложений с использованием MoonScript (или Lua), который работает внутри настроенной версии Nginx под названием OpenResty.
Lua Server Pagesподключаемый модуль скриптового движка Lua, превосходящий любой другой подход к встраиваемой веб-разработке, предлагает радикальный сокращенный путь к традиционным страницам сервера C.
Эти веб-фреймворки могут использовать ваши веб-приложения и помочь вам в выполнении мощных операций.