Moteur Rails - Gemmes dépendances, comment les charger dans l'application?
Je suis en train de faire un moteur ici, il fonctionne très bien en stand alone.
Quand je le transformer en un joyau, et de le charger à l'intérieur d'une autre application, je reçois beaucoup de undefined erreurs, venant de mon moteur de gem avec des dépendances.
Ici est la gemspec:
s.add_dependency('paperclip')
s.add_dependency('jquery-rails')
s.add_dependency('rails3-jquery-autocomplete')
s.add_dependency('remotipart')
s.add_dependency('cancan')
Dans l'application, quand je fais un bundle install, il répertorie toutes ces dépendances, mais que je lance l'application je reçois beaucoup de undefined méthodes d'erreurs (has_attachment à partir d'un trombone, par exemple). Il semble que l'application ne prend pas en charge les moteurs de dépendances.
Est-ce le comportement par défaut? Puis-je le changer?
Même chose s'est produite avec un plug-in à l'intérieur du moteur.
Si j'insère à la main ces joyaux, dans l'application Gemfile, toutes les œuvres...
- pouvez-vous voir ces installée dans le Gemfile.verrouillage de l'application? Est-ce que votre moteur Gemfile utiliser 'gemspec' au-dessous de la source? Si votre application Gemfile.verrouillage montre ces dépendances installé, alors je crois qu'ils devraient être disponibles dans l'app. Si vous n'avez pas vu ce post, check it out -> yehudakatz.com/2010/12/16/...
Vous devez vous connecter pour publier un commentaire.
Les inclure dans votre gemfile et d'exécuter la commande bundle install. Alors en faire la demande dans votre
lib/<your_engine>/engine.rb file
. N'oubliez pas d'exiger de rubygemsPuis dans votre application hôte (L'app où vous avez inclus votre gem) d'exécuter la commande bundle install/bundle mise à jour (bundle mise à jour a fait le tour pour moi) et puis tout devrait fonctionner parfaitement. Vous pouvez également tester par le démarrage de la console dans votre application hôte et il suffit de taper le nom du module par exemple
Espère que cette aide
.gemspec
fichier. Donc, ils DOIVENT être chargés dans l'application d'hébergement sansrequire
de commande. Mais ils ne le sont pas.Vous pouvez exiger manuellement comme Daniel affiché, et vous pouvez également exiger automatiquement. Vous avez besoin d'ajouter des dépendances en 3 fichiers:
yourengine.gemspec
Gemfile
lib/yourengine.rb
Mise à jour: C'est une simple démonstration de comment exiger les dépendances. Vous devriez le tester et de filtrer les éléments indésirables, par exemple: besoin d.nom, sauf d.type == :développement (thx @imsinu9)
require d.name
échoue avec uneLoadError
alors vous pourriez avoir à faire un peu de sauvetage.require d.name unless d.type == :development
pour éviter de charger le développement de la dépendance.de trombone du README :
Pour les Non-Rails utilisation:
J'ai eu le même problème et qu'il fixe pour moi.
Vous devez ajouter le fichier gem à la fois à l' .fichier gemspec, et votre moteur.rb fichier.
Dans l' .fichier gemspec ce serait comme:
s.add_dependency "kaminari", "0.16.1"
Dans le moteur.rb fichier en haut à ajouter:
require "kaminari"
Je pense que vous devez également ajouter la gemme au moteur rails Gemfile et bundle install, mais je ne suis pas certain si vous avez besoin là-bas.
À l'heure (Rails 3.1 et au-dessus, je pense), vous ne devriez pas avoir de ne déclarer toutes les gemmes dans le test/mannequin/Gemfile plus:
Citation de test/mannequin/Gemfile (générées à l'aide
rails plugin new my_engine --full
):Vous ne devriez vraiment pas besoin d'eux sur le Gemsec, et ils doivent être chargés. Quand tu dis "ici, c'est le gemspec", vous entourer avec les
Gem::Specification.new do |s|
ou quelque chose à cet effet, à droite?Vous pouvez inclure toutes les gemmes de l'environnement avec un simple système de regroupement de commande:
Vous pourriez ajouter à une
config/initializer
.