J'essaie de découvrir comment une gemme dans le gemfile Rails 3 peut automatiquement ajouter un middleware à la pile Rack. Je cherche le crochet dans cette gemme. Par exemple ... quand j'ajoute le gemme de legs à mon gemfile de Rails 3, alors le concept ajoute d'une manière ou d'une autre le directeur comme intergiciel sur la pile de support. Cela semble fonctionner automatiquement. Il n'y a aucune autre configuration nécessaire dans l'application Rails 3. Je suppose qu'il est automatiquement appelé une classe/méthode spéciale à partir de boot.rb. Des allusions comment ce processus fonctionne vraiment?Crochet de gemmes pour ajouter un middleware sur la pile Rack avec Rails 3
Répondre
Cela ne montrera pas exactement comment un gem/plugin se connecte au middleware, mais c'est comme cela que vous pouvez le faire. Sur la base de cela, un gem/plugin peut faire la même chose:
Pour insérer un middleware, vous pouvez l'exécuter dans un fichier d'initialisation. Ce qui précède va insérer un middleware Flash Cookie (code personnalisé) avant le chargement du rack session_store.
Pour voir votre propre middleware, exécutez middleware râteau
use Rack::Lock
use ActionController::Failsafe
use FlashSessionCookieMiddleware, "_xxxxxx_session"
use ActionController::Session::CookieStore, #<Proc:[email protected](eval):8>
use ActionController::ParamsParser
use Rack::MethodOverride
use Rack::Head
use ActionController::StringCoercion
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
run ActionController::Dispatcher.new
Pour insérer middleware dans un bijou, vous devez l'ajouter au moteur de la pierre précieuse.
dans lib/gem_name/engine.rb
require 'rails'
module GemName
class Engine < Rails::Engine
config.app_middleware.insert_before(Warden::Manager, Rack::OpenID)
end
end
C'est tout. 'config.app_middleware' au lieu de' config.middleware' est important. –
Vous devez utiliser un Railtie. En fait, c'est l'exemple même donné dans le Rails::Railtie documentation.
class MyRailtie < Rails::Railtie
initializer "my_railtie.configure_rails_initialization" do |app|
app.middleware.use MyRailtie::Middleware
end
end
Ceci est la réponse la plus propre, et je voudrais ajouter que le moteur est un Railtie donc vous pouvez utiliser cette méthode d'initialisation dans votre moteur, vous n'êtes pas obligé de faire un railtie séparé – systho
- 1. Rails 3 en tant que middleware Rack
- 2. impasse middleware rack
- 3. Comment définir un cookie avec un composant middleware (ruby) rack?
- 4. Comment utiliser un middleware Rack uniquement pour certains chemins?
- 5. Comment utiliser le middleware rack avec Rails3?
- 6. Rails d'accès 3 session de Rack?
- 7. Solve problème de rack pour Dreamhost et Rails 3 rc
- 8. Créer des plugins ou des gemmes pour Rails 3?
- 9. Toute personne utilisant JRuby-Rack avec Rails 3?
- 10. Comment faire pour que les objets du middleware Rack utilisé s'exécutent dans une application Rails
- 11. Utilisation du middleware Rack pour des sessions interdomaines dans la même application
- 12. Création de rails 3 gemmes: Installation de gemmes réussie, mais sans fonctionnalité
- 13. Rails - Domaines de cookie dynamiques utilisant Rack
- 14. Erreur Rack avec DreamHost, passager et Rails de
- 15. Comment recharger toutes les gemmes dans Rails 3?
- 16. Rails: impact de beaucoup de gemmes sur la performance?
- 17. Test Rails Métal/Rack avec RSpec?
- 18. gemmes Déballer [Rails 2.3.5]
- 19. Gestion des versions gemmes/dépendances pour Rails
- 20. PHP Rails 3 routage
- 21. Rails ActiveSupport Problème avec les gemmes d'état pour les notifications
- 22. Rails en rack 1.0 erreur
- 23. gestion de gemmes et de gemmes imbriquées
- 24. Recommandations pour les bons plugins/gemmes 'paging' et 'tagging' dans Rails 3?
- 25. Rails 3 Flash Uploader
- 26. Installez mysql2 bijou sur Snow Leopard pour Rails 3 avec RVM
- 27. rails 3 swf_upload InvalidAuthenticityToken et l'envoi de cookie de session
- 28. Rack :: ResponseHeaders dans rackup pour Sinatra
- 29. Comment/Quand/Où étendre les classes de gemmes (via class_eval et Modules) dans Rails 3?
- 30. Spree and Rails 3- Comment ajouter un blog?
Cela explique la partie de l'ajout de middleware à la pile Rack, merci. Mais je me demande toujours quelle méthode/crochet de la gemme est appelée par Rails 3, quand la gemme est juste dans le Gemfile? – Zardoz
Ok, je pense que je l'ai résolu. Le problème était que je ne pouvais pas trouver le fichier d'initialisation que vous avez mentionné dans une gemme. Dans Rails 2.x, c'était rails/init.rb. Mais cela n'est plus appelé dans Rails 3. Le chemin à parcourir est de créer une lib/gem_name.rb (où gem_name est le nom de cette gem). Cela sera appelé automatiquement par Rails 3 lorsque la gemme est spécifiée dans le Gemfile. Et là, vous pouvez ajouter le middleware. (Voir https://rails.lighthouseapp.com/projects/8994/tickets/3745-railsinitrb-is-not-being-called-anymore) – Zardoz
Cool sur les gemmes! Pour les Rails 2.3 et supérieurs (après leur déplacement en rack) - vous créez un fichier nommé quel.rb dans le répertoire config/initialiseurs –