GraphQL Ruby. Entä suorituskyky?
GraphQL:llä, kuten millä tahansa teknologialla, on ongelmansa, joista osa johtuu suoraan arkkitehtuurista ja osa on samanlaisia kuin missä tahansa muussa sovelluksessa. Ratkaisut ovat kuitenkin...
Lue lisää telineen roolista Rubyn ekosysteemissä asiantuntijaltamme ja paranna ruby-pelisi taitoja.
Työskennellessään Ruby-verkkokehykset on yleistä pitää asioita itsestäänselvyyksinä. Tiedämme, että kehys käsittelee HTTP-pyynnöt ja toteuttaa väliohjelmiston logiikan puolestamme. Kun olemme uteliaampia, alamme miettiä, mitä kulissien takana on, ja siinä kohtaa alamme kuulla Rackista.
The projekti on kuvattu nimellä "modulaarinen Ruby-verkkopalvelimen käyttöliittymä". Rack on rajapinta, jonka avulla voimme luoda web-sovelluksia yhdistämällä web-palvelimien, web-kehysten ja väliohjelmistojen API:n.
Kuten yllä olevassa kuvassa on kuvattu, Rack toimii välikätenä verkkosovelluksemme ja sovelluspalvelimen välillä, se kietoo HTTP-pyynnöt yksinkertaisimpaan muotoon.
tavalla mahdollista.
Rack-sovellus on Ruby-objekti (ei luokka), joka vastaa seuraaviin kysymyksiin soita
. Se ottaa täsmälleen yhden argumentin, joka on ympäristö ja palauttaa jäädyttämättömän Array of
täsmälleen kolme arvoa:
ja keho.
Rack-sovelluksen yksityiskohtaiset tekniset tiedot löytyvät osoitteesta täällä.
vaatia 'teline'
luokka RackApp
def call(env)
status = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>My Rack -sovellus<h1>']
[status, headers, body]
end
end
Käsittelijät yhdistävät verkkopalvelimet Rackiin. Rack sisältää käsittelijät Thin, WEBrick, FastCGI, CGI, SCGI ja LiteSpeed -palvelimille. Jokaisen Rackia tukevan sovelluspalvelimen tulisi
tarjoavat käsittelijän yhteyden luomista varten (Pumalla on oma käsittelijänsä).Käsittelijät aktivoidaan yleensä kutsumalla kutsua MyHandler.run(myapp)
. Toinen valinnainen hash voidaan välittää palvelinkohtaisten asetusten sisällyttämiseksi.
Ohuen sovelluspalvelimen käyttö
Rack::Handler::Thin.run(app)
Oletustiedosto, johon konfiguraatio lisätään, on config.ru
ja voit suorittaa sen käyttämällä rackup
komento konsolissasi.
Rackin avulla voimme luoda väliohjelmistosovelluksia (sovelluksia pääverkkosovelluksen ja sovelluspalvelimen välille). Nämä väliohjelmistosovellukset ketjutetaan toisiinsa ja suoritetaan peräkkäin.
Rack Middleware -ohjelmiston on pantava täytäntöön kaikki eritelmät Telinesovellus ja täyttää seuraavat vaatimukset:
luokka RackMiddleware
def initialize(app)
@app = app
end
def call(env)
@app.call(env)
end
end
Nyt kun tunnemme perusasiat, olemme valmiita luomaan ensimmäisen Rack-sovelluksemme Rack Middleware -ohjelmiston avulla ja ajamaan sitä Puman (Application Server) avulla.
Varmista, että sinulla on teline
jalokivi ja puma
gem asennettu.
gem asentaa telineeseen
gem asentaa puma
Ensin meidän on luotava tiedosto nimeltä config.ru
ja tämä tiedosto käyttää
Rack::Builder DSL -sovelluksen suorittamiseksi ja väliohjelmiston lisäämiseksi.
Sisällä config.ru
tiedostoon lisätään yksinkertainen Rack-sovellus, jonka määrittelimme kohdassa
edelliset jaksot.
# config.ru
luokka RackApp
def call(env)
status = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>My Rack -sovellus<h1>']
[status, headers, body]
end
end
Tässä teemme pienen muutoksen yksinkertaiseen väliohjelmistoon, ja nyt se lisää palvelinohjelmiston HTML-runkoon suorituksen jälkeen.
# config.ru
luokka RackMiddleware
def initialize(app)
@app = app
end
def call(env)
status, headers, body = @app.call(env)
body << env['SERVER_SOFTWARE']
[status, headers, body]
end
end
Viimeisenä vaiheena ajamme palvelimen ja näemme sovelluksemme käynnissä. Meidän config.ru
tiedosto näyttää seuraavalta:
# config.ru
luokka RackApp
def call(env)
status = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>My Rack -sovellus<h1>']
[status, headers, body]
end
end
luokka RackMiddleware
def initialize(app)
@app = app
end
def call(env)
status, headers, body = @app.call(env)
body << env['SERVER_SOFTWARE']
[status, headers, body]
end
end
käytä RackMiddleware
run RackApp.new
Viimeisillä riveillä määrittelemme väliohjelmiston käyttämällä komentoa käytä
ja ajamme sovelluksen käyttämällä juosta.
Olemme valmiita toteuttamaan rackup
konsolissa ja näet palvelimen olevan käynnissä. Voimme tarkistaa portin, jossa sovelluksemme on käynnissä, ja meidän pitäisi nähdä jotakin tällaista, kun olemme ottaneet siihen yhteyttä:
Joskus on hyvä palata perusasioiden äärelle ja oppia tuntemaan tekniikka, jonka kanssa työskentelemme. Learning Rack antaa meille selkeän yleiskuvan arkkitehtuurista ja paljastaa "taikuuden" taustalla. Ruby-verkkokehykset.