Je suis en train de développer un Gem à utiliser exclusivement dans les projets Rails. Il a été développé dans le répertoire lib
de l'application Rails et doit maintenant être extrait dans un Gem distinct.Quand faut-il charger le code Gem en fonction des rails?
Certaines classes dépendent de l'infrastructure Rails à charger. Deux exemples:
class OurGem::Hookup
CONFIG_PATH = 'config/hookup.rb'.freeze
[...]
end
class OurGem::RoutingContainer
include Rails.application.routes.url_helpers
[...]
end
Normalement, je charger le code Gem dans le fichier de module principal de la pierre à l'aide require
. Mais comme il est chargé par bundler, Rails n'est pas prêt et des choses comme Rails.application
et Rails.root
ne peuvent pas être utilisées. Le premier exemple pourrait être contourné en n'évaluant pas le chemin au moment du chargement, mais le second me semble un peu compliqué.
Quelle est la bonne façon de faire cela? Enregistrer un initialiseur en utilisant un railtie et exiger les fichiers "délicats" là?
Merci pour votre réponse. Eh bien, notre Gem ne fournit aucune fonctionnalité moteur (contrôleurs, routes, ...) lui-même, mais il fournit un mélange en utilisant les routes de l'application hôte. Je ne sais pas exactement comment un moteur Rails nous aiderait à faire cela. – Remo