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&gtHello Wsapi!</p>")
      coroutine.yield("<p&gtPATH_INFO: " .. wsapi_env.PATH_INFO .. "</p>")
      coroutine.yield("<p&gtSCRIPT_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.

Эти веб-фреймворки могут использовать ваши веб-приложения и помочь вам в выполнении мощных операций.