2010-11-25 32 views
4

tldr; Lorsque j'exécute une tâche de rake dans une application de test utilisant un moteur, les dépendances du moteur ne semblent pas respectées. Je dois (-D) RY en spécifiant la dépendance dans GemfileDépendances de gemme avec Rails 3 moteur défaillant dans l'initialiseur

J'ai créé un moteur Rails comme bijou en utilisant un bijoutier. Il a une dépendance à l'égard que je l'ai Devise spécifié dans le Rakefile:

gem.add_runtime_dependency 'devise', '~> 1.1.3' 

Dans mon application test ajouter la dépendance du moteur à la Gemfile et bundle install montre qui méditent est ramassé et installé. Toutefois, si je lance un rake db:migrate initial une erreur est renvoyée:

uninitialized constant Devise 
<snip>config/initializers/devise.rb:3 

Si j'ajoute manuellement la dépendance à Gemfile de Concevoir l'application de test cela fonctionne. J'ai probablement manqué quelque chose d'évident, mais à ce stade, il semble que l'application de test récupère et installe la dépendance correctement, mais pour une raison quelconque, le code d'initialisation échoue sauf si la dépendance est listée dans Gemfile.

Répondre

7

Vous êtes susceptible d'avoir trouvé une solution ou une solution de contournement, mais je vais mettre comment j'ai résolu cela au cas où quelqu'un aurait le même problème.

Il suffit de mettre:

require 'devise' 

dans lib/my_gem.rb.

Les rails autoloads les gemmes spécifiées dans le Gemfile et rien d'autre. Si vous développez une gemme avec des dépendances, vous devez les exiger manuellement.

+1

Oui, c'est ce que j'ai fait. J'ignorais simplement quels étaient les rôles du Rakefile/.gemspec/Gemfile, mais l'excellent post de Yehuda [Clarifying the Roles of the .gemspec and Gemfile] (http://yehudakatz.com/2010/12/16/clarifying -the-roles-of-the-gemspec-and-gemfile /) a tout nettoyé! – justsee

+0

@justsee: merci pour le lien, le développement de la gemme peut être trouble au début, mais les messages comme celui-ci aident grandement à éclaircir la confusion. –