GraphQL Ruby. E le prestazioni?
GraphQL, come ogni tecnologia, ha i suoi problemi, alcuni dei quali derivano direttamente dall'architettura e altri sono identici a quelli che si riscontrano in qualsiasi altra applicazione. Tuttavia, le soluzioni...
Scoprite il ruolo del rack nell'ecosistema di Ruby grazie al nostro esperto e migliorate il vostro gioco con Ruby.
Mentre si lavora con Framework web Ruby è comune dare le cose per scontate. Sappiamo che il framework gestirà le richieste HTTP ed eseguirà la logica del middleware per noi. Quando diventiamo più curiosi, iniziamo a chiederci cosa c'è dietro le quinte, ed è qui che iniziamo a sentire parlare di Rack.
Il progetto è descritto come "Un'interfaccia modulare per server web in Ruby". Rack è l'interfaccia che ci permette di creare applicazioni web unificando le API per server web, framework web e middleware.
Come descritto nell'immagine precedente, Rack funge da intermediario tra la nostra applicazione Web e l'Application Server, avvolgendo le richieste HTTP nel più semplice
modo possibile.
Un'applicazione Rack è un oggetto Ruby (non una classe) che risponde a chiamata
. Richiede esattamente un argomento, il parametro ambiente e restituisce una matrice non congelata di
esattamente tre valori:
e il corpo.
È possibile trovare le specifiche dettagliate di un'applicazione Rack qui.
richiedere 'rack'
classe RackApp
def call(env)
stato = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>L'applicazione My Rack<h1>']
[stato, intestazioni, corpo]
fine
fine
I gestori collegano i server Web con Rack. Rack include gestori per Thin, WEBrick, FastCGI, CGI, SCGI e LiteSpeed. Ogni server applicativo che supporta Rack deve
forniscono un gestore per creare la connessione (Puma ha un proprio gestore).I gestori di solito vengono attivati chiamando MyHandler.run(myapp)
. È possibile passare un secondo hash opzionale per includere la configurazione specifica del server.
Utilizzo di Thin application server
Rack::Handler::Thin.run(app)
Il file predefinito per aggiungere la configurazione è config.ru
e si può eseguire utilizzando rackup
nella console.
Rack ci permette di creare applicazioni middleware (applicazioni tra la nostra applicazione web principale e l'application server). Queste applicazioni middleware sono concatenate ed eseguite in sequenza.
Il Rack Middleware deve implementare tutte le specifiche di un Applicazione a rack e soddisfare i seguenti punti:
classe RackMiddleware
def initialize(app)
@app = app
fine
def call(env)
@app.call(env)
fine
fine
Ora che conosciamo le basi, siamo pronti a creare la nostra prima applicazione Rack con Rack Middleware e a eseguirla con Puma (Application Server).
Assicuratevi di avere il scaffale
e la gemma puma
gemma installata.
gemma installare rack
gemma installare puma
Per prima cosa, dobbiamo creare un file chiamato config.ru
e questo file farà uso di
il DSL Rack::Builder per eseguire l'applicazione e aggiungere il middleware.
All'interno del config.ru
aggiungeremo la semplice applicazione Rack definita in
le sezioni precedenti.
# config.ru
classe RackApp
def call(env)
stato = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>L'applicazione My Rack<h1>']
[stato, intestazioni, corpo]
fine
fine
Qui apporteremo una piccola modifica al nostro semplice middleware e ora aggiungerà il software del server al nostro corpo HTML dopo l'esecuzione.
# config.ru
classe RackMiddleware
def initialize(app)
@app = app
fine
def call(env)
status, header, body = @app.call(env)
body << env['SERVER_SOFTWARE']
[status, header, body]
fine
fine
Come ultimo passo, eseguiamo il server e vediamo la nostra applicazione in funzione. Il nostro config.ru
Il file avrà il seguente aspetto:
# config.ru
classe RackApp
def call(env)
stato = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>L'applicazione My Rack<h1>']
[status, header, body]
fine
fine
classe RackMiddleware
def initialize(app)
@app = app
fine
def call(env)
status, header, body = @app.call(env)
corpo << env['SERVER_SOFTWARE']
[status, header, body]
fine
fine
utilizzare RackMiddleware
eseguire RackApp.new
Nelle ultime righe, si specifica il middleware usando utilizzo
ed eseguiamo l'applicazione utilizzando correre.
Siamo pronti ad eseguire rackup
nella nostra console e vedremo il server in esecuzione. Possiamo controllare la porta su cui è in esecuzione la nostra applicazione e dovremmo vedere qualcosa di simile dopo l'accesso:
A volte è bene tornare alle basi e conoscere le intuizioni della tecnologia con cui lavoriamo. Imparare Rack ci dà una chiara visione d'insieme dell'architettura e ci svela la "magia" che si cela dietro la tecnologia. Quadri web Ruby.