Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  6 812
En introduksjon til et fantastisk ruby rammeverk: Sinatra

Nå vet jeg ikke hvor mange av dere som har prøvd Ruby men for de av oss som har brukt det en del så vet vi at det finnes en rekke rammeverk for å lage web applikasjoner.

Den mest kjente av de er vel kanskje Rails, som er et ganske stort og velfungerende rammeverk som gjør utviklingen av applikasjoner for web med MVC-prinsippet mye mye enklere.

Er man derimot på utkikk etter noe litt enklere der du er friere til å bestemme alt selv er Sinatra et veldig enkelt DSL (Domain Specific Language) for å lage web applikasjoner. Det passer perfekt til å lage små tjenester og API'er.

Den mest grunnleggende Sinatra applikasjonen er jo selvfølgelig Hello World.

Vi lager en fil som heter hello.rb, den trenger egentlig ikke hete noe spesielt. Jeg bruker alltid en ferdig mal når jeg begynner på nye prosjekter så da heter den alltid application.rb

Kode

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello World"
end
Det finnes flere måter å starte en sinatra applikasjon.
Den kanskje enkleste metoden når man holder på med utvikling er at man kjører ruby scriptet sitt som vanlig.

Kode

ruby hello.rb
Da vil du få endel output til terminalen din og serveren vil starte opp på port 4567.

Besøker du http://0.0.0.0:4567 vil du da se teksten "Hello World" og ingen ting annet.

Dette er jo enkelt i seg selv men for å vise litt mer hva som er mulig tar jeg for meg et annet eksempel. [1]

Kode

# sorter.rb
require 'rubygems'
require 'sinatra'

# Usage: curl -F "info=@hallo.txt" localhost:4567/sorter
post '/sorter' do
  params[:info][:tempfile].readlines.sort
end
For de av oss som kan ruby er det ganske lett å se hva som foregår.
params hashen er sinatras måte å gi deg tilgang til parameterne gitt når folk kobler til f.eks http://dinside.com/user/<brukerid>
Da er <brukerid> ett parameter.

.readlines leser som dere kanskje skjønner den midlertidige filen som blir opprettet og Array.sort metoden sorterer linjene den har lest inn.

Tekstfilen hallo.txt inneholder

Kode

sinatra
og
ruby
er
kjempe
morro :)
Da er det bare å starte opp Sinatra serveren med ruby sorter.rb i samme mappe som du har hallo.txt filen.

Vi bruker cURL til å koble til serveren og sende argumentet med fila.

Kode

curl -F "info=@hallo.txt" localhost:4567/sorter
Da får man det sorterte resultatet tilbake

Kode

sinatra-guide git:(master) ✗ curl -F "info=@hallo.txt" localhost:4567/sorter
er
kjempe
morro :)
og
ruby
sinatra
Her kan du lese mer om cURL

Referanser:
[1] - http://rubylearning.com/blog/2009/06...a-web-service/

Håper denne guiden får noen fler til å prøve Ruby og Sinatra, håper ihvertfall ikke at min forferdelige evne til å skrive artikler skremmer noen bort fra å prøve :-)
z0p
uʍop ǝpısdn
z0p's Avatar
Hadde vært kjekt om du skrev litt om hvorfor man burde bruke (eller ikke burde) dette rammeverket. Litt om styrker og svakheter. Siden ruby ikke er det mest utbredte språket her på forumet kunne du kanskje skrevet litt om hvor og hvorfor man bør gå for ruby fremfor andre løsninger (f.eks php). Jeg savner også mer henvisninger til annet eksisterende informativt materiale på nettet.

Det er kjempemessig at du tar deg tid til å skrive slike innlegg, men for min del, med litt kunnskap om emnet (dog ikke noe særlig ruby), gir den meg veldig lite. Før jeg vil vite noe om hvordan jeg går frem, vil jeg gjerne vite hvorfor eller om jeg faktisk trenger dette. Jeg er på ingen måte negativ, bare gir litt konstruktiv feedback
Tittelninja
flexd's Avatar
Trådstarter Donor
Skjønner.. Har mer på vei som skal forklare mer men mangel på tid :-) Ble også forferdelig stygt uten syntax highlighting :-(
Jeg har aldri hvert borte i Sinatra, men har arbeidet litt i Rails (som forøvrig er helt konge!). Startet å pusle litt med dette etter vi ble introdusert til faget på høyskolen. Om jeg får tid etterhvert kan jeg sikkert slenge inn en liten beskrivelse på hvorfor, og når dette foretrekkes over andre web-teknologier.

Overordnet er det jo som du er inne på, med MVC (Model, View, Controller)-prinsippet, samt at man ønsker rask funksjonalitet over konfigurasjon. For ikke å glemme et strålende bibliotek for addons, og håndtering samt implementering av eksisterende (laget av andre) metoder. Publisering av nettsider med heroku er også genialt enkelt og lett å sette opp. Rails-miljøet går sterkt ut for å ikke oppfinne hjulet på nytt, for å si det slik - og har haugevis av geniale løsninger på ulike problemstillinger.

Ser jeg gikk litt OT her, men så til spørsmålet mitt: har du noen flere eksempler på hva du mener Sinatra-rammeverket gjør bedre/lettere/raskere/smartere enn Rails? Eventuelt praktisk eksempler på hva du mener er lettere og friere i Sinatra? Ellers flott at du tar deg tid til å lage slike poster
Tittelninja
flexd's Avatar
Trådstarter Donor
Vel for det første er Sinatra MYE enklere og lettere enn Rails (i form av minnebruk o.l). Rails gjør veldig mye for deg, du genererer en mappe full av mapper til konfigurasjon og struktur.

Sinatra er det veldig opp til en selv. Det finnes ingen generator i selve Sinatra, men det finnes andre prosjekter som gjør dette for deg.

Jeg velger å bruke et template for alle mine prosjekter, det kan man finne her: http://github.com/flexd/sinatra-template

Der kan man se den generelle strukturen jeg velger å jobbe med, veldig likt Rails.

Hovedstyrken til Sinatra er det som også er det negative. Du kan velge fritt hvordan du vil sette opp ting.

Det mest grunnleggende eksempelet jeg kan komme på er det jeg nevnte først i tråden.

Kode

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello World"
end
Hvis du skal få til det samme i Rails blir det fort veldig mye unødvendig satt opp for deg.

Sinatras styrke er at det er enkelt å sette opp raskt og passer perfekt til små tjenester eller API systemer for å gi rask tilgang til en database.

Det kan f.eks brukes veldig enkelt som API-backend til et spill som tracker highscores eller lignende.

Skal du lage Facebook v2 er ikke Sinatra noe godt alternativ, men trenger du noe lite og praktisk (som for eksempel mitt siste prosjekt som parser Civ5Replay filer til HTML http://github.com/flexd/civ5replays) så passer det perfekt.

Ruby er et flott språk men en god del av programmering er planlegging.
Planlegger man å bruke ting som passer til den jobben man trenger får man som oftest et mye bedre resultat. Jeg kunne godt brukt Rails til prosjektet mitt men for øyeblikket gjør Sinatra jobben like godt hvis ikke bedre fordi det er så enkelt.

Jeg må tenke meg om litt før jeg kommer med mer, er ikke helt sikker på hva jeg skal skrive enda.

Man kan lese mer om Sinatra her http://www.sinatrarb.com/intro.html
Det er en grei introduksjon til Sinatra som nevner de meste grunnleggende.

PS: Restyle, du er ikke åpen for noen prosjekter da? Jeg leter etter noen å kode Ruby sammen med :-)
Det høres jo ganske interessant ut igrunn, får se om jeg ikke får titte litt på det når jeg får litt tid til overs. Jeg er sannsynligvis helt med på noen prosjekter i fremtiden, men akkurat nå for for tiden er jeg fryktelig opptatt med skole og andre ting. Skal sende deg en PM hvis ting løsner seg litt opp etterhvert Forøvrig er jo Ruby-kode bare porno
Tittelninja
flexd's Avatar
Trådstarter Donor
Bra flere enn meg har sett lyset ang. Ruby! :-) Skal se om jeg får skrevet noe mer senere, litt opptatt med andre prosjekter og skole for tiden.

For de av dere som har lyst til å begynne med programmering anbefaler jeg på det sterkeste Ruby. Glemt PHP, Ruby is the shit!

En veldig kort introduksjon (20min) til Ruby kan dere finne her http://www.ruby-lang.org/en/documentation/quickstart/

Det finnes også en rekke fine bøker om emnet, mer info finnes lett tilgjengelig på http://ruby-lang.org

For de av dere som kan Ruby kan dere lese mer om Sinatra i Sinatra-boken http://sinatra-book.gittr.com/