
Rack fournit une interface minimale, modulaire et adaptable pour développer des applications Web dans Ruby. En encapsulant les requêtes et les réponses HTTP de la manière la plus simple possible, il unifie et distille le pont entre les serveurs Web, les frameworks Web et l'application Web en un seul appel de méthode.
Les détails exacts sont décrits dans la spécification du rack, à laquelle toutes les applications du rack doivent se conformer.
| Version | Soutien |
|---|---|
| 3.1.x | Corrections de bugs et correctifs de sécurité. |
| 3.0.x | Correctifs de sécurité uniquement. |
| 2.2.x | Correctifs de sécurité uniquement. |
| <= 2.1.x | Fin du support. |
Veuillez consulter la politique de sécurité pour plus d'informations.
Il s'agit de la dernière version de Rack. Il contient des corrections de bugs et des correctifs de sécurité. Veuillez consulter le journal des modifications pour obtenir des informations détaillées sur des modifications spécifiques.
Cette version du rack contient des modifications importantes qui sont détaillées dans le guide de mise à niveau. Il est recommandé de passer au Rack 3 dès que possible pour recevoir les dernières fonctionnalités et correctifs de sécurité.
Cette version de Rack reçoit uniquement des correctifs de sécurité et des efforts doivent être faits pour migrer vers Rack 3.
À partir de Ruby 3.4, la dépendance base64 ne sera plus une gemme par défaut et peut provoquer un avertissement ou une erreur concernant l'absence base64 . Pour corriger cela, ajoutez base64 comme dépendance à votre projet.
Ajoutez la gem rack à votre bundle d'applications ou suivez les instructions fournies par un framework Web pris en charge :
# Install it generally:
$ gem install rack
# or, add it to your current application gemfile:
$ bundle add rack Si vous avez besoin de fonctionnalités de Rack::Session ou bin/rackup veuillez ajouter ces gemmes séparément.
$ gem install rack-session rackup Créez un fichier appelé config.ru avec le contenu suivant :
run do | env |
[ 200 , { } , [ "Hello World" ] ]
endExécutez-le à l'aide de la gemme rackup ou d'un autre serveur Web pris en charge.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello WorldRack est pris en charge par une large gamme de serveurs, notamment :
Vous devrez consulter la documentation du serveur pour connaître les fonctionnalités et les limitations dont ils peuvent disposer. En général, toute application Rack valide fonctionnera de la même manière sur tous ces serveurs, sans rien changer.
Rack fournit une gemme distincte, rackup, qui est une interface générique pour exécuter une application Rack sur les serveurs pris en charge, notamment WEBRick , Puma , Falcon et autres.
Ces frameworks et bien d’autres prennent en charge la spécification Rack :
Entre le serveur et le framework, Rack peut être personnalisé selon les besoins de vos applications à l'aide d'un middleware. Rack lui-même est livré avec le middleware suivant :
Rack::CommonLogger pour créer des fichiers journaux de style Apache.Rack::ConditionalGet pour renvoyer les réponses Not Modified lorsque la réponse n’a pas changé.Rack::Config pour modifier l'environnement avant de traiter la requête.Rack::ContentLength pour définir un en-tête de content-length en fonction de la taille du corps.Rack::ContentType pour définir un en-tête content-type par défaut pour les réponses.Rack::Deflater pour compresser les réponses avec gzip.Rack::ETag pour définir l'en-tête etag sur les corps qui peuvent être mis en mémoire tampon.Rack::Events pour fournir des hooks faciles lorsqu'une demande est reçue et lorsque la réponse est envoyée.Rack::Files pour servir des fichiers statiques.Rack::Head pour renvoyer un corps vide pour les requêtes HEAD.Rack::Lint pour vérifier la conformité à la spécification du rack.Rack::Lock pour sérialiser les requêtes à l'aide d'un mutex.Rack::MethodOverride pour modifier la méthode de requête en fonction d'un paramètre soumis.Rack::Recursive pour inclure des données provenant d'autres chemins dans l'application et pour effectuer des redirections internes.Rack::Reloader pour recharger les fichiers s'ils ont été modifiés.Rack::Runtime pour inclure un en-tête de réponse avec le temps nécessaire au traitement de la demande.Rack::Sendfile pour travailler avec des serveurs Web pouvant utiliser un service de fichiers optimisé pour les chemins du système de fichiers.Rack::ShowException pour détecter les exceptions non gérées et les présenter de manière agréable et utile avec une trace cliquable.Rack::ShowStatus pour utiliser de belles pages d'erreur pour les réponses d'erreur client vides.Rack::Static pour un service plus configurable de fichiers statiques.Rack::TempfileReaper pour supprimer les fichiers temporaires créés lors d'une requête.Tous ces composants utilisent la même interface, qui est décrite en détail dans la spécification du rack. Ces composants optionnels peuvent être utilisés comme vous le souhaitez.
Si vous souhaitez développer en dehors des frameworks existants, implémenter les vôtres ou développer des middlewares, Rack fournit de nombreuses aides pour créer des applications Rack rapidement et sans faire les mêmes tâches Web partout :
Rack::Request qui fournit également l'analyse des chaînes de requête et la gestion en plusieurs parties.Rack::Response pour une génération pratique de réponses HTTP et une gestion des cookies.Rack::MockRequest et Rack::MockResponse pour des tests efficaces et rapides de l'application Rack sans véritables allers-retours HTTP.Rack::Cascade pour essayer des applications Rack supplémentaires si une application renvoie une réponse introuvable ou une méthode non prise en charge.Rack::Directory pour servir les fichiers dans un répertoire donné, avec des index de répertoire.Rack::MediaType pour analyser les en-têtes de type de contenu.Rack::Mime pour déterminer le type de contenu en fonction de l'extension du fichier.Rack::RewindableInput pour rendre n'importe quel objet IO rembobinable, en utilisant un tampon de fichier temporaire.Rack::URLMap pour acheminer vers plusieurs applications au sein du même processus. Rack expose plusieurs paramètres de configuration pour contrôler diverses fonctionnalités de l'implémentation.
param_depth_limit Rack :: Utils . param_depth_limit = 32 # defaultQuantité maximale d'imbrication autorisée dans les paramètres. Par exemple, si la valeur est 3, cette chaîne de requête serait autorisée :
?a[b][c]=d
mais cette chaîne de requête ne serait pas autorisée :
?a[b][c][d]=e
La limitation de la profondeur empêche un éventuel débordement de pile lors de l'analyse des paramètres.
multipart_file_limit Rack :: Utils . multipart_file_limit = 128 # defaultNombre maximum de pièces avec un nom de fichier qu'une requête peut contenir. Accepter trop de parties peut conduire le serveur à manquer de descripteurs de fichiers.
La valeur par défaut est 128, ce qui signifie qu'une seule requête ne peut pas télécharger plus de 128 fichiers à la fois. Réglé sur 0 pour aucune limite.
Peut également être défini via la variable d'environnement RACK_MULTIPART_FILE_LIMIT .
(Ceci est également appelé multipart_part_limit et RACK_MULTIPART_PART_LIMIT pour des raisons de compatibilité)
multipart_total_part_limitNombre total maximum de parties qu'une demande peut contenir, de tout type, y compris les champs de formulaire de type fichier et non-fichier.
La valeur par défaut est 4 096, ce qui signifie qu’une seule requête ne peut pas contenir plus de 4 096 parties.
Réglé sur 0 pour aucune limite.
Peut également être défini via la variable d'environnement RACK_MULTIPART_TOTAL_PART_LIMIT .
Voir CHANGELOG.md.
Voir CONTRIBUTING.md pour des détails spécifiques sur la façon d'apporter une contribution à Rack.
Veuillez publier des bogues, des suggestions et des correctifs sur les problèmes GitHub.
Veuillez consulter notre politique de sécurité pour connaître le processus de divulgation responsable et de signalement des bogues de sécurité. En raison de l'utilisation généralisée de la bibliothèque, il est fortement préférable que nous gérions le timing afin de fournir des correctifs viables au moment de la divulgation. Votre aide dans cette affaire est grandement appréciée.
rackup Un outil utile pour exécuter des applications Rack à partir de la ligne de commande, notamment Rackup::Server (anciennement Rack::Server ) pour les serveurs de script.
rack-contrib La pléthore de middleware utiles a créé le besoin d’un projet qui collecte de nouveaux middleware Rack. rack-contrib comprend une variété de composants complémentaires pour Rack et il est facile de contribuer à de nouveaux modules.
rack-sessionFournit une gestion pratique des sessions pour Rack.
L'équipe Rack Core, composée de
et les anciens du Rack
je tiens à remercier :
Rack::Deflater .Rack::ContentType .Rack::Response .Rack::Response .Rack est publié sous la licence MIT.