Dans l'article précédent, vous avez appris ce qu'est le rack. Maintenant, il est temps de commencer à utiliser Rack et de servir quelques pages.
Commençons d'abord par une application «Hello world». Cette application retournera, quel que soit le type de demande, un code d'état de 200 (qui est en langage HTTP pour «OK») et la chaîne "Bonjour le monde" comme le corps.
Avant d'examiner le code suivant, réfléchissez à nouveau aux exigences auxquelles toute application Rack doit répondre..
Une application Rack est un objet Ruby qui répond à la méthode d'appel, prend un seul paramètre de hachage et renvoie un tableau contenant le code d'état de la réponse, les en-têtes de réponse HTTP et le corps de la réponse sous forme de tableau de chaînes.
classe HelloWorld
appel def (env)
return [200, , ["Bonjour tout le monde!"]]
fin
fin
Comme vous pouvez le voir, un objet du type Bonjour le monde répondra à toutes ces exigences. Il le fait d'une manière très minime et pas terriblement utile, mais il répond à toutes les exigences.
C'est assez simple, maintenant, connectons-le à WEBrick (le serveur HTTP fourni avec Ruby). Pour ce faire, nous utilisons le Rack :: Gestionnaire :: WEBrick.run , passez-lui une instance de Bonjour le monde et le port pour fonctionner. Un serveur WEBrick sera désormais en cours d'exécution et Rack transmettra les requêtes entre le serveur HTTP et votre application.
Remarque, ce n'est pas un moyen idéal pour lancer des choses avec Rack. Il n'est montré ici que pour faire fonctionner quelque chose avant de plonger dans une autre fonctionnalité de Rack appelée "Rackup", qui est montrée ci-dessous. L'utilisation de Rack :: Handler de cette manière présente quelques problèmes. Tout d'abord, ce n'est pas très configurable. Tout est codé en dur dans le script. Deuxièmement, comme vous le remarquerez si vous exécutez le script suivant, vous ne pouvez pas tuer le programme. Il ne répondra pas à Ctrl-C. Si vous exécutez cette commande, fermez simplement la fenêtre du terminal et ouvrez-en une nouvelle.
#! / usr / bin / env rubis
nécessite un «rack»
classe HelloWorld
appel def (env)
return [200, , ["Bonjour tout le monde!"]]
fin
fin
Rack :: Gestionnaire :: WEBrick.run (
HelloWorld.new,
: Port => 9000
)
Bien que cela soit assez facile à faire, ce n'est pas la façon dont le rack est normalement utilisé. Le rack est normalement utilisé avec un outil appelé rackup. Rackup fait plus ou moins ce qui était dans la section inférieure du code ci-dessus, mais d'une manière plus utilisable. Rackup est exécuté à partir de la ligne de commande et reçoit un .ru «Fichier Rackup». Il s'agit simplement d'un script Ruby qui, entre autres, alimente une application vers Rackup.
Un fichier Rackup très basique pour ce qui précède ressemblerait à ceci.
classe HelloWorld
appel def (env)
revenir [
200,
'Content-Type' => 'text / html',
["Bonjour le monde!"]
]
fin
fin
exécutez HelloWorld.new
Tout d'abord, nous avons dû apporter une toute petite modification à la Bonjour le monde classe. Rackup exécute une application middleware appelée Rack :: Lint qui vérifie les réponses. Toutes les réponses HTTP doivent avoir un Type de contenu en-tête, donc cela a été ajouté. Ensuite, la dernière ligne crée simplement une instance de l'application et la transmet au courir méthode. Idéalement, votre application ne devrait pas être écrite entièrement dans le fichier Rackup, ce fichier devrait nécessiter votre application et en créer une instance de cette façon. Le fichier Rackup est juste de la «colle», aucun vrai code d'application ne devrait être là.
Si vous exécutez la commande rackup helloworld.ru, il démarrera un serveur sur le port 9292. Il s'agit du port Rackup par défaut.
Rackup a quelques fonctionnalités plus utiles. Tout d'abord, des choses comme le port peuvent être modifiées sur la ligne de commande ou sur une ligne spéciale du script. Sur la ligne de commande, passez simplement un -port p paramètre. Par exemple: rackup -p 1337 helloworld.ru. A partir du script lui-même, si la première ligne commence par # \, puis il est analysé comme la ligne de commande. Vous pouvez donc également définir des options ici. Si vous vouliez exécuter sur le port 1337, la première ligne du fichier Rackup pourrait lire # \ -p 1337.