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 PageOrbit предоставляет еще один вариант, то есть код 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. 
Эти веб-фреймворки могут использовать ваши веб-приложения и помочь вам в выполнении мощных операций.