61 votes

y compris les tâches de rake dans les pierres précieuses

1) Y a-t-il un "meilleur" endroit pour les tâches de rake à l'intérieur des gemmes? Je les ai vus dans / tasks, / lib / tasks et je les ai vus écrits en tant que * .rb et * .rake - je ne sais pas lequel (le cas échéant) est 'correct'

2) Comment puis-je les rendre disponibles pour l'application une fois la gemme configurée dans l'environnement?

44voto

edebill Points 3572

On Rails 3, vous le faites via Railties. Voici le code pour le faire pour un bijou 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 en gros, vous créez une classe qui hérite de Rails::Railtie, puis dans la classe que vous avez un rake_tasks bloc qui charge les fichiers pertinents. Vous devez charger au lieu de l'exiger si vous souhaitez utiliser un .râteau extension.

J'ai trouvé que j'ai besoin de spécifier le chemin d'accès complet à Dir (d'où le Fichier.rejoignez la gymnastique). Si je voulais juste la liste le fichier explicitement ensuite, j'ai pu m'en sortir avec juste dire "charger" tâches/foo.râteau'", car le dossier lib de mon gem était dans le chemin de chargement.

31voto

Simone Carletti Points 77653

Soit /tasks et lib/tasks sont un bon endroit. J'utilise /tasks , lorsque les tâches sont destinés à être utilisés pour le travail ou la gestion de la perle lui-même, j'utilise lib/tasks , lorsque les tâches sont destinés à être chargés par le Gem utilisateurs.

C'est parce que les utilisateurs peuvent avoir un problème dans le chargement ruby fichiers en dehors de l' lib le dossier qui est automatiquement ajouté à la charge du chemin lors de la Gemme est exige.

Aussi, je vous suggère d'utiliser le caractère *.râteau extension. De nos jours, presque tous les IDE associates .rake extension de ruby et la plus avancée de l'IDE peut même analyser le contenu râteau scripts. L' .rake extension est un meilleur choix pour les développeurs de trop parce que vous pouvez donner un aperçu immédiat du contenu à l'intérieur du fichier.

À propos de votre deuxième question, actuellement il n'y a pas moyen d'avoir des Rails de chargement de votre râteau tâches lorsque le plugin est fourni sous forme de Gem. Vous devez inclure le râteau de fichier dans votre application (à l'aide d'un râteau de fichier ou dans les principaux Rakefile) ou cloner le râteau tâches dans votre projet.

Si vous installez le plugin dans le fournisseur de dossier, tous *.rake des fichiers dans les deux tâches et les lib/tasks répertoires sont automatiquement chargés dans les 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 }

12voto

Steven Soroka Points 8446

pour le support Rails 3, la première ligne de votre fichier lib / .rb peut être:

 Dir["tasks/**/*.rake"].each { |ext| load ext } if defined?(Rake)
 

pour le support de Rails 2, l’installateur gem devra éditer son fichier Rakefile et ajouter:

 Dir["#{Gem.searcher.find('<gemname>').full_gem_path}/lib/tasks/**/*.rake"].each { |ext| load ext }
 

après les déclarations obligatoires.

REMARQUES:

  • Assurez-vous de remplacer par le nom de votre gemme réelle.
  • Cela suppose que toutes les tâches rake visibles par Rails sont dans lib / tasks /

Je n'ai encore rien trouvé de plus facile. Commentaires?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X