Учебники

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.

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-сервера.

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