In het vorige artikel in deze reeks artikelen hebben we het gehad over wat Sinatra is. In dit artikel zullen we kijken naar enkele echte functionele Sinatra-code, die enkele Sinatra-functies aanraken, die allemaal in de komende artikelen in deze serie zullen worden uitgediept.
Voordat je begint, moet je doorgaan en Sinatra installeren. Sinatra installeren is net zo eenvoudig als elk ander juweeltje. Sinatra heeft een paar afhankelijkheden, maar niets belangrijks en je zou geen problemen moeten hebben om het op elk platform te installeren.
$ gem install sinatra
De Sinatra-applicatie "Hallo wereld" is schokkend eenvoudig. Exclusief de vereiste regels, shebang en witruimte, het zijn slechts drie regels. Dit is niet zomaar een klein deel van uw applicatie, zoals een controller in een Rails-applicatie, dit is het hele ding. Een ander ding dat je misschien opvalt, is dat je niets zoals de Rails-generator hoeft uit te voeren om een applicatie te genereren. Plak de volgende code in een nieuw Ruby-bestand en je bent klaar.
#! / usr / bin / env ruby
vereisen 'rubygems'
vereisen 'sinatra'
krijgen '/' doen
'Hallo Wereld!'
einde
Natuurlijk is dit geen erg nuttig programma, het is gewoon "Hallo wereld", maar nog nuttiger toepassingen in Sinatra zijn niet veel groter. Dus, hoe voer je deze kleine webapplicatie uit? Een soort complex script / server commando? Nee, voer het bestand gewoon uit. Het is gewoon een Ruby-programma, voer het uit!
inatra $ ./hello.rb
== Sinatra / 0.9.4 heeft het podium betreden op 4567 voor ontwikkeling met back-up van Mongrel
Nog niet erg spannend. Het is de server gestart en gebonden aan poort 4567, dus ga je gang en wijs je webbrowser naar http: // localhost: 4567 /. Er is je "Hallo wereld" -bericht. Webapplicaties waren nog nooit zo eenvoudig in Ruby.
Laten we dus eens kijken naar iets interessants. Laten we een applicatie maken die je bij naam begroet. Om dit te doen, moeten we een parameter gebruiken. Parameters in Sinatra zijn zoals al het andere - eenvoudig en duidelijk.
#! / usr / bin / env ruby
vereisen 'rubygems'
vereisen 'sinatra'
krijg '/ hallo /: naam' doen
"Hallo # params [: naam]!"
einde
Nadat u deze wijziging hebt aangebracht, moet u de Sinatra-toepassing opnieuw opstarten. Dood het met Ctrl-C en voer het opnieuw uit. (Er is een manier om dit te omzeilen, maar dat zullen we in een toekomstig artikel bekijken.) Nu zijn de parameters eenvoudig. We hebben een actie uitgevoerd genaamd / Hello /: naam. Deze syntaxis bootst na hoe de URL's eruit zullen zien, dus ga naar http: // localhost: 4567 / hallo / uw naam om het in actie te zien.
De /Hallo gedeelte komt overeen met dat gedeelte van de URL van het verzoek dat u heeft gedaan, en :naam zal alle andere tekst die u geeft absorberen en in de params hash onder de sleutel :naam. Parameters zijn net zo eenvoudig. Er is natuurlijk veel meer dat je hiermee kunt doen, inclusief op regexp gebaseerde parameters, maar dit is alles wat je in bijna elk geval nodig hebt.
Laten we tot slot deze toepassing opfrissen met een beetje HTML. Sinatra retourneert alles van uw URL-handler naar de webbrowser. Tot nu toe hebben we zojuist een reeks tekst geretourneerd, maar we kunnen daar zonder probleem wat HTML aan toevoegen. We zullen ERB hier gebruiken, net zoals in Rails. Er zijn andere (aantoonbaar betere) opties, maar dit is misschien de meest bekende, want het komt met Ruby en zal het hier prima doen.
Eerst geeft Sinatra een weergave weer met de naam lay-out als er een bestaat. Deze layoutweergave moet een hebben opbrengst uitspraak. Deze rendementsverklaring legt de uitvoer vast van de weergave die wordt weergegeven. Hiermee kunt u heel eenvoudig lay-outs maken. Eindelijk hebben we een Hallo weergave, die het eigenlijke hallobericht genereert. Dit is de weergave die is weergegeven met de eb: hallo methodeaanroep. U zult merken dat er geen afzonderlijke weergavebestanden zijn. Dat kan, maar voor zo'n kleine applicatie is het het beste om alle code in één bestand te bewaren. Hoewel de weergaven aan het einde van het bestand gescheiden zijn.
#! / usr / bin / env ruby
vereisen 'rubygems'
vereisen 'sinatra'
krijg '/ hallo /: naam' doen
@name = params [: naam]
eb: hallo
einde
__EINDE__
@@ layout
@@ HalloHallo !