Στο προηγούμενο άρθρο, μάθατε τι είναι η Rack. Τώρα, ήρθε η ώρα να αρχίσετε να χρησιμοποιείτε το Rack και να προβάλετε μερικές σελίδες.
Γειά σου Κόσμε
Πρώτον, ας ξεκινήσουμε με ένα "Γειά σου Κόσμε" εφαρμογή. Αυτή η εφαρμογή θα επιστρέψει, ανεξάρτητα από το είδος αιτήματος που της έχει δοθεί, με έναν κωδικό κατάστασης 200 (ο οποίος είναι HTTP-ομιλίας για "OK") και το string "Γειά σου Κόσμε" ως το σώμα.
Πριν εξετάσετε τον παρακάτω κώδικα, εξετάστε ξανά τις απαιτήσεις που πρέπει να πληροί οποιαδήποτε εφαρμογή Rack.
Μια εφαρμογή Rack είναι οποιοδήποτε αντικείμενο Ruby που ανταποκρίνεται στη μέθοδο κλήσης, παίρνει μια μόνο παράμετρο hash και επιστρέφει έναν πίνακα που περιέχει τον κώδικα κατάστασης απόκρισης, τις κεφαλίδες απόκρισης HTTP και το σώμα απόκρισης ως πίνακα χορδές.
class HelloWorld
κλήση def (env)
επιστροφή [200, {}, ["Hello world!"]]
τέλος
τέλος
Όπως μπορείτε να δείτε, ένα αντικείμενο του τύπου Γειά σου Κόσμε θα ικανοποιήσει όλες αυτές τις απαιτήσεις. Το κάνει με έναν ελάχιστο και όχι τρομερά χρήσιμο τρόπο, αλλά ικανοποιεί όλες τις απαιτήσεις.
WEBrick
Αυτό είναι πολύ απλό, τώρα ας το συνδέσουμε στο WEBrick (ο διακομιστής HTTP που συνοδεύει Ρουμπίνι). Για να γίνει αυτό, χρησιμοποιούμε το Rack:: Χειριστής:: WEBrick.run μέθοδο, να περάσει ένα παράδειγμα του Γειά σου Κόσμε και το λιμάνι για να τρέξει. Ένας διακομιστής WEBrick θα εκτελείται τώρα και ο Rack θα διαβιβάζει αιτήματα μεταξύ του διακομιστή HTTP και της εφαρμογής σας.
Σημειώστε ότι αυτό δεν είναι ένας ιδανικός τρόπος για να ξεκινήσετε τα πράγματα με το Rack. Εμφανίζεται εδώ μόνο για να τρέξει κάτι πριν βυθιστείτε σε ένα άλλο χαρακτηριστικό του Rack που ονομάζεται "Rackup", το οποίο φαίνεται παρακάτω. Η χρήση του Rack:: Handler με αυτόν τον τρόπο έχει μερικά προβλήματα. Πρώτον, δεν είναι πολύ ρυθμιζόμενο. Όλα είναι σκληρά κωδικοποιημένα στο σενάριο. Δεύτερον, όπως θα παρατηρήσετε αν εκτελέσετε το ακόλουθο σενάριο, δεν μπορείτε να σκοτώσετε το πρόγραμμα. Δεν θα απαντήσει στο Ctrl-C. Εάν εκτελέσετε αυτήν την εντολή, απλά κλείστε το παράθυρο του τερματικού και ανοίξτε ένα νέο.
#! / usr / bin / env ruby
απαιτούν "rack"
class HelloWorld
κλήση def (env)
επιστροφή [200, {}, ["Hello world!"]]
τέλος
τέλος
Rack:: Χειριστής:: WEBrick.run (
HelloWorld.new,
: Λιμάνι => 9000
)
Rackup
Ενώ αυτό είναι πολύ εύκολο να γίνει, δεν είναι το πώς χρησιμοποιείται συνήθως το Rack. Το Rack χρησιμοποιείται συνήθως με ένα εργαλείο που ονομάζεται rackup. Το Rackup κάνει λίγο πολύ αυτό που βρισκόταν στο κάτω μέρος του παραπάνω κώδικα, αλλά με πιο χρήσιμο τρόπο. Η Rackup εκτελείται από τη γραμμή εντολών και δίνεται α .ru "Rackup αρχείο." Αυτό είναι μόνο ένα σενάριο Ruby που, μεταξύ άλλων, τροφοδοτεί μια εφαρμογή στο Rackup.
Ένα πολύ βασικό αρχείο Rackup για τα παραπάνω θα έμοιαζε με κάτι τέτοιο.
class HelloWorld
κλήση def (env)
ΕΠΙΣΤΡΟΦΗ [
200,
{'Τύπος περιεχομένου' => 'text / html'},
["Γειά σου Κόσμε!"]
]
τέλος
τέλος
τρέξτε το HelloWorld.new
Πρώτον, έπρεπε να κάνουμε μια μικρή αλλαγή στο Γειά σου Κόσμε τάξη. Το Rackup τρέχει μια εφαρμογή middleware που ονομάζεται Rack:: Lint ότι η νοοτροπία ελέγχει τις απαντήσεις. Όλες οι απαντήσεις HTTP πρέπει να έχουν a Τύπος περιεχομένου κεφαλίδα, έτσι ώστε να προστεθεί. Στη συνέχεια, η τελευταία γραμμή δημιουργεί απλώς μια εμφάνιση της εφαρμογής και την μεταφέρει στην τρέξιμο μέθοδος. Στην ιδανική περίπτωση, η αίτησή σας δεν πρέπει να είναι γραμμένη εξ ολοκλήρου στο αρχείο Rackup, αυτό το αρχείο πρέπει να απαιτεί την εφαρμογή σας σε αυτό και να δημιουργεί μια εμφάνιση αυτού με αυτόν τον τρόπο. Το αρχείο Rackup είναι απλώς "κόλλα", δεν πρέπει να υπάρχει κανένας πραγματικός κώδικας εφαρμογής.
Εάν εκτελέσετε την εντολή rackup helloworld.ru, θα ξεκινήσει ένα διακομιστή στη θύρα 9292. Αυτή είναι η προεπιλεγμένη θύρα Rackup.
Το Rackup έχει κάποια πιο χρήσιμα χαρακτηριστικά. Πρώτον, τα πράγματα όπως η θύρα μπορούν να αλλάξουν στη γραμμή εντολών ή σε μια ειδική γραμμή στο σενάριο. Στη γραμμή εντολών, απλά περάστε σε ένα -p θύρα παράμετρο. Για παράδειγμα: rackup -p 1337 helloworld.ru. Από το ίδιο το σενάριο, αν ξεκινάει η πρώτη γραμμή #\, τότε αναλύεται ακριβώς όπως η γραμμή εντολών. Έτσι, μπορείτε να ορίσετε και εδώ τις επιλογές. Αν θέλετε να τρέξετε στη θύρα 1337, θα μπορούσε να διαβαστεί η πρώτη γραμμή του αρχείου Rackup # \ -p 1337.