Web development with Lua Programming Language Introducing Sailor, a web MVC framework in Lua Etiene Dalcol @etiene_d Web development with Lua Programming Language Introducing Sailor, a web MVC framework in Lua Etiene Dalcol @etiene_d @etiene_d Sailor! http://sailorproject.org Lua Ladies http://lualadies.org Google Summer of Code LabLua Advantages better reasons • It looks cool (I heard you could make games with it) better reasons • • It looks cool (I heard you could make games with it) It’s made in my home country (In my university to be more precise) better reasons • • • It looks cool (I heard you could make games with it) It’s made in my home country (In my university to be more precise) It’s easy to learn ? ? ? ? ? ? Lua on the web • Early stage • cgilua ~ 1995 • Kepler Project ~ 2003 “ I have myself developed Web sites with pure C++, Java, C#, PHP, and Python. The easiest way to go was definitely Python. If the libraries existed, Lua would be not quite as easy to use as Python, but probably quite a bit more efficient; I think it would become my first choice... if the libraries existed.” Michael Gogins “ Recently there was some discussion about mod_lua on the Apache developers mailing list. I mentioned there that I feel Lua could replace PHP as the number one web scripting language if mod_lua were stable (i.e. not still in beta) and it were implemented well (not making some of PHP's mistakes such as putting everything in the global scope with no consistent naming or parameter schemes). I've wanted to use Lua for all the things I currently use PHP for ever since I discovered it.” Rena Why? Servers • Apache: mod_lua • Nginx: OpenResty Servers • Apache: mod_lua • Nginx: OpenResty Servers • Apache: mod_lua • Nginx: OpenResty • Xavante • Others Frameworks • Orbit (2007) Least known No significant updates since 2010 MVC Frameworks • Orbit (2007) Least known No significant updates since 2010 MVC • Luvit (2011) Most popular Intense development node.js port 2-4x faster Frameworks • Lapis (2012) Intense development Moonscript and Lua Very well documented Templater OpenResty only Not MVC Frameworks • Lapis (2012) Intense development Moonscript and Lua Very well documented Templater OpenResty only Not MVC Others Complicated, abandoned, poorly documented, license issues or I never heard about it... • Sailor! Sailor! Sailor! Sailor! 0.1 (Venus) 0.2 (Mars) What exactly is Sailor? • • • • • • • • It’s an MVC web framework Completely written in Lua Compatible with Apache (mod_lua), Nginx (OpenResty), Mongoose, Xavante and Lwan Compatible with Linux, Windows and Mac Compatible with different databases MIT License Pre alpha v0.2 (Mars) 0.3 (Jupiter) will be released TODAY! What (else) is cool about Sailor? • • • • • • • • • • • Routing and friendly URLs Session, cookies, include, redirect… Lua Pages parsing Mail sending Simple Object Relational-Mapping Validation (valua) Basic login and authentication modules Form generation Themes (Bootstrap integration out of the box) App generator (Linux and Mac only) Model and CRUD generator • What (else) is cool about Sailor? Routing and friendly URLs • Session, cookies, include, redirect… Lua Pages parsing Mail sending Simple Object Relational-Mapping Validation (valua) Basic login and authentication modules Form generation Themes (Bootstrap integration out of the box) App generator (Linux and Mac only) Model and CRUD generator • Lua at client • • • • • • • • • Not so great things • It’s still in early development • Things are changing fast • It lacks features • Documentation How to get Sailor! $ $ $ $ luarocks install sailor sailor_create ‘My App’ /var/www cd /var/www/my_app lua start-server.lua How to get Sailor! $ $ $ $ luarocks install sailor sailor_create ‘My App’ /var/www cd /var/www/my_app lua start-server.lua $ luarocks install luasql-mysql App structure /conf /controllers /models /pub /runtime /themes /views Example! -- /controllers/site.lua local site = {} function site.index(page) local msg = “Hello World” page:render(‘index’, { msg = msg } ) end function site.notindex(page) page:write(“I’m different!”) end return site Example! <!-- /views/site/index.lp --> <p> A message from the server: <?lua page:print(msg) ?> <br/> The message again: <%= msg %> <!-- same thing as above —> </p> Example! Example! <?lua@server -- Code here runs on the server ?> <?lua -- Same as above ?> <?lua@client -- Runs at the client ?> <?lua@both -- Runs at the server and the client ?> <?lua@both another_msg = “Another message” ?> <?lua page:print(another_msg) ?> <?lua@client js.window.alert(another_msg) ?> Example! Example! local user = {} local v = require “valua” -- validation module user.attributes = { { id = “safe” }, { name = v:new().not_empty() } } user.db = { key = ‘id’, table = ‘users’ } user.relations = { posts = { -- u.posts relation = “HAS_MANY”, model = “post”, attribute = “author_id” } } return user Example! -- /controllers/site.lua local site = {} function site.index(page) local User = sailor.model(‘user’) local u = User:new() u.name = ‘Arnold’ local msg if u:save() then msg = ‘Success’ else msg = table.unpack(u.errors) end local users = User:find_all() page:render(‘index’, { msg = msg, users = users } ) end return site sailorproject.org github.com/Etiene/sailor [email protected] @etiene_d Example! sailorproject.org github.com/Etiene/sailor [email protected] @etiene_d
© Copyright 2024