1) Y a-t-il un "meilleur" endroit pour les tâches de râteau à l'intérieur des gemmes? Je les ai vus dans /tasks
, /lib/tasks
, et je les ai vus écrites comme *.rb
et *.rake
- Je ne sais pas quoi (le cas échéant) est "correct"
2) Comment puis-je les mettre à la disposition de l'application une fois que le gemme est configuré dans l'environnement?
ON Rails 3, vous faites ceci via des rails. Voici le code pour le faire pour un joyau que je viens de faire:
class BackupTask < Rails::Railtie
rake_tasks do
Dir[File.join(File.dirname(__FILE__),'tasks/*.rake')].each { |f| load f }
end
end
Donc, vous créez essentiellement une classe qui hérite de Rails::Railtie
, alors dans cette classe, vous avez un rake_tasks
Block qui charge les fichiers pertinents. Vous devez charger au lieu d'exiger si vous souhaitez utiliser un .rake
extension.
J'ai trouvé que j'ai besoin de spécifier le chemin complet de Dir
(d'où le File.join
gymnastique). Si je voulais juste énumérer le fichier explicitement, je pourrais sortir avec juste dire load 'tasks/foo.rake'
parce que le /lib
dir de ma gemme était dans le chemin de charge.
Soit /tasks
et lib/tasks
sont un bon endroit. J'utilise /tasks
Lorsque les tâches sont censées être utilisées pour travailler ou gérer la gemme elle-même, j'utilise lib/tasks
Lorsque les tâches sont censées être chargées par les utilisateurs de GEM.
En effet, les utilisateurs peuvent avoir un problème dans le chargement Ruby en dehors du dossier lib
qui est automatiquement ajouté au chemin de charge lorsque le gemme est requis.
De plus, je vous suggère d'utiliser la * extension .Rake. De nos jours, presque tous IDE Associates .rake
extension to Ruby fichiers et le plus avancé IDE peut même analyser le contenu en tant que scripts Rake. Le .rake
L'extension est également un meilleur choix pour les développeurs, car vous pouvez fournir une vue d'ensemble immédiate du contenu dans le fichier.
À propos de votre deuxième question, il n'existe actuellement aucun moyen d'avoir Rails Chargement de vos tâches Rake lorsque le plugin est emballé comme GEM. Vous devez inclure le fichier RAKE dans votre application (dans un autre fichier de râteau ou dans le microfile principal) ou clonez les tâches du râteau de votre projet.
Si vous installez le plugin dans le dossier du fournisseur, tout *.rake
Les fichiers dans les deux tâches et les répertoires lib/tâches sont automatiquement chargés dans votre Rails Portée par les deux lignes suivantes.
Dir["#{Rails_ROOT}/vendor/plugins/*/tasks/**/*.rake"].sort.each { |ext| load ext }
Dir["#{Rails_ROOT}/vendor/plugins/*/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
pour Rails 3 Support, la ligne supérieure de votre fichier lib/.rb peut être:
Dir["tasks/**/*.rake"].each { |ext| load ext } if defined?(Rake)
pour Rails 2 Support, l'installateur de GEM devra éditer leur filfime et ajouter:
Dir["#{Gem.searcher.find('<gemname>').full_gem_path}/lib/tasks/**/*.rake"].each { |ext| load ext }
après les déclarations requises.
REMARQUES:
Je n'ai encore rien trouvé encore. Commentaires?