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.
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 включают в себя:
- Обработка запросов
- Буферизация вывода
- Аутентификация
- Загрузка файлов
- Запросить изоляцию
- мультиплексирование
Простой пример 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 Web Components
-
Copas , диспетчер, основанный на сопрограммах, которые могут использоваться серверами TCP / IP.
-
Cosmo , движок «безопасных шаблонов», защищающий ваше приложение от произвольного кода в шаблонах.
-
Coxpcall инкапсулирует Lua нативный pcall и xpcall с сопрограмм-совместимыми.
-
LuaFileSystem , переносимый способ доступа к базовой структуре каталогов и атрибутам файлов.
-
Rings , библиотека, которая обеспечивает способ создания новых состояний Lua из 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-сервера.
Moonstalk позволяет эффективно разрабатывать и размещать динамически генерируемые веб-проекты, построенные на языке Lua; от базовых страниц до сложных приложений.
Lapis , фреймворк для создания веб-приложений с использованием MoonScript (или Lua), который работает внутри настроенной версии Nginx под названием OpenResty.
Lua Server Pages , плагин скриптового движка Lua, который отбрасывает любой другой подход к встроенной веб-разработке, предлагает впечатляющий краткий путь к традиционным страницам C-сервера.
Эти веб-фреймворки могут использовать ваши веб-приложения и помочь вам в выполнении мощных операций.