Alessio Caiazza

Articles tagged 'sinatra'

Book review:"Sinatra: Up and Running"

Italian version below.

The first time I leafed through this book I wondered if 20 bucks was too much for a book of just over 100 pages.

When I started reading it was clear that this book was worth every single cent.

Clear concepts and well written, too bad for some mistakes in the code examples. Not even a word is wasted explaining how to develop in ruby; surely it is a book for experienced developers.

If you are looking for a step by step guide about web development with sinatra then this is not the book you are looking for. There are no advices on how to organize a project nor any best practice.

Who is this book for?

It’s a book for experienced developers who want to sharpen their knowledge about how sinatra works and not settle for high-level API. You’ll learn how to develop and use modular applications, building the theoretical bases for applications reuse; you’ll learn how RACK works and how to integrate several web applications developed with different frameworks (Rails, Sinatra and also simple RACK based applications).

Not even a sentence is redundant in this excellent manual, surely it is a reference book to keep on hand.

O'Reilly Shop

Italian version

La prima volta che ho sfogliato questo libro mi sono chiesto se 20$ non fossero troppi per un libretto di poco più di 100 pagine.

Dopo aver iniziato a leggerlo è stato subito chiaro che il libro valeva ogni singolo centesimo.

Concetti chiari e ben scritti, peccato solo per qualche errore negli esempi di codice. Non si spreca neanche una parola per i concetti di ruby; è decisamente un libro per programmatori esperti.

Se state cercando una guida passo passo per lo sviluppo di applicazioni web con sinatra, lasciate perdere, questo non è il libro che fa per voi. Non ci sono consigli su come organizzare un progetto, né alcuna best practice.

Allora per chi è questo libro?

Per sviluppatori esperti che vogliono approfondire il funzionamento di sinatra e che non si accontentano delle API di alto livello. Vengono trattate le applicazioni modulari, gettando le basi teoriche per il riuso delle applicazioni; viene spiegato molto bene come funziona RACK e come integrare web-app differenti (Rails, Sinatra ma anche semplici applicazioni fatte secondo le API di RACK).

Neanche una frase è superflua in questo ottimo manuale, sicuramente si tratta di un testo di riferimento da tenere a portata di mano.

O'Reilly Shop

(l0g.in 4KFN00)

heroku.com il deploy di applicazioni rack-based è un gioco

Ieri sera ho scoperto un servizio interessante, si chiama Heroku ed è un hosting di applicazioni basate su rack come ad esempio Ruby on Rails o Sinatra.

Fino a qui nulla di nuovo, ma il loro sistema si basa sulla semplicità della procedura di deploy che come ben sa chi ci ha provato, non è proprio al livello di una applicazione php.

Per provare un po’ questo sistema ho deciso di creare una mini applicazione con sinatra che esegue l'hash MD5 di alcune stringhe. Vediamo come funziona.

Prerequisiti

È necessario installare la gemma heroku; per l'applicazione dell'esempio serviranno anche le gemme sinatra e thin.

$ sudo gem install heroku
$ sudo gem install sintra 
$ sudo gem install thin

Per il deploy serve git. Scaricabile da qui.

Fatto questo è necessario registrare un account su Heroku.

L'applicazione

Creiamo il file hasher.rb dentro la cartella hasher.

require 'rubygems'
require 'sinatra'
require 'digest/md5'

get '/' do
  erb :home
end

post '/md5' do
  unless params[:str].nil?
    "<code>MD5(#{params[:str]}) -> #{Digest::MD5.hexdigest(params[:str])}</code>"
  else
    redirect '/'
  end
end

# Accettiamo solo richieste in POST
get '/md5' do
  redirect '/'
end

use_in_file_templates!

__END__

@@ home

<p>
Questa è una semplice webapp (esagerato!) per spiegare come funziona 
<a href="http://heroku.com">Heroku</a>.<br></br>
Puoi trovare l'articolo relativo nel mio 
<a href="http://bit.ly/nkw0V" rel="me">blog</a>.
</p>

<form action="/md5" accept-charset="utf-8" method="post">
  <input type="text" name="str" value="Write here..." id="str"></input>
  <input type="submit"></input>
</form>

Per il deploy con rack è necessario creare anche il file config.ru

#rack config file
require 'hasher'
run Sinatra::Application

Il deploy

Ora giunge il momento di mandare online la nostra applicazione

#creiamo il repository git nella cartella corrente
$ git init
Initialized empty Git repository in /Users/nolith/Documents/Projects/hasher/.git/

#aggiungiamo tutti i file nella cartella al controllo di versione
$ git add .

#eseguiamo il commit dei file
$ git commit -m 'Import iniziale: hash md5'
[master (root-commit)]: created 21b62e4: "Import iniziale: hash md5"
 2 files changed, 41 insertions(+), 0 deletions(-)
 create mode 100644 config.ru
 create mode 100644 hasher.rb

#creiamo una nuova applicazione su heroku
# sarà possibile rinominarla in seguito
$ heroku create
Enter your Heroku credentials.
Email: utente@server.it
Password:
Uploading ssh public key
Created http://growing-summer-43.heroku.com/ | git@heroku.com:growing-summer-43.git
Git remote heroku added

#eseguiamo l'upload dell'applicazione
$ git push heroku master
Counting objects: 4, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 784 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)

-----> Heroku receiving push
-----> Rack app detected
       Compiled slug size is 004K
-----> Launching..... done
       App deployed to Heroku

To git@heroku.com:growing-summer-43.git
 * [new branch]      master -> master

#Proviamo la nostra applicazione
$heroku open

Alcune note

La prima volta che si utilizza un comando di heroku vengono richieste le credenziali di accesso e viene fatto l'upload di una chiave pubblica ssh (Come creare una coppia di chiavi per ssh).

Finito! Siamo online!

Conclusioni

Quanto mostrato si può fare anche per una applicazione Rails, in questo caso non servirà il file config.ru. Attualmente il deploy di una applicazione basata su rack non è dei più semplici, anche se devo dire che mod_rails ha notevolmente migliorato le cose. Dobbiamo però considerare anche il fattore economico, per piccole applicazioni di test heroku è gratuito, per applicazoni che necessitano di risorse consistenti direi che la scelta di basarsi su AWS è un vantaggio non da poco, i benefici offerti dalla struttura di Amazon sono impossibili da ottenere ad un costo contenuto per uno sviluppatore indipendete o una PMI.

(l0g.in 3zhDy9)
Alessio

Hello. My name is Alessio Caiazza. I'm also known as nolith. I love writing code and technology. I'm passionate about production engineering.

This is where I write my thoughts trying to follow IndieWeb principles.

Staff Backend Engineer, Delivery @ GitLab

he/him/his

"Il sapere umano appartiene al mondo."

An IndieWeb Webring 🕸💍