2009-04-12 2 views
32

Also schreibe ich ein kleines Juwel und ich habe ein '/ Aufgaben' Verzeichnis mit einigen speziellen Rake Aufgaben. Wie stelle ich diese Aufgaben automatisch überall zur Verfügung, wo der Edelstein benötigt wird? Ich wünschte zum Beispiel, ich könnte 'Rake mygemrake: task' in meinem routs root dir ausführen, nachdem ich das Juwel installiert habe.Rake Aufgabe von Juwel überall verfügbar machen?

Antwort

2

Sehen Sie sich die rdoctask in Rake für ein Beispiel für die Definition einer Aufgabe durch ein Juwel. Die Aufgabe wird in Ruby definiert anstelle der Rake-Build-Sprache und kann wie so erforderlich sein:

require 'rake'    # the gem 
require 'rake/rdoctask' # the task 
0

Das ist, was Sake für ist. Datamapper und Merb verwenden Sake erfolgreich.

0

Sie müssen diese Aufgaben in das Rakefile der Anwendung importieren. Dies ist, wie es in meiner aussieht (I bundler08 bin mit meinen Edelsteine ​​verwalten):

%w(gem1 gem2 gem3).each do |g| 
    Dir[File.dirname(__FILE__) + "/vendor/bundler_gems/**/#{g}*/tasks/*.rake"].each do |f| 
    import f 
    end 
end 
23

Für Rails3 Anwendungen, mögen Sie vielleicht prüfen, ein Railtie für Ihr Juwel machen.

Sie können dies mit:

lib/your_gem/railtie.rb

require 'your_gem' 
require 'rails' 
module YourGem 
    class Railtie < Rails::Railtie 
    rake_tasks do 
     require 'path/to/rake.task' 
    end 
    end 
end 

lib/your_gem.rb

module YourGem 
    require "lib/your_gem/railtie" if defined?(Rails) 
end 

Obwohl, ich hatte meinen Anteil Schwierigkeiten mit der Anforderung der rake.task Datei in meinem railtie.rb. Ich entschied mich, nur meine ein oder zwei Aufgaben innerhalb der rake_tasks Block zu definieren.

+0

Nur ein Wort der Warnung, ich konnte Rails nicht dazu bringen, 'Rake'-Tasks mit einer' .rake'-Erweiterung zu verwenden, die diese Methode verwenden. –

+0

Ich denke, ich erinnere mich, dass der Fehler etwas ähnlich dem ist, was hier beschrieben wird: http://blog.smartlogicsolutions.com/2009/05/26/including-external-rake-files-in-your-projects-rakefile-keep -your-rake-tasks-organised/ vielleicht mit 'import' anstelle von' require' ist der Schlüssel zum Erfolg? Ich werde in diese nächste Chance graben, die ich einen freien Moment bekomme :) –

+1

Was ich getan hatte, ist '' rb' stattdessen zu verwenden. Problem gelöst. :) –

0

Sie können normale Rake Aufgaben für einen Edelstein schreiben und sie wie folgt laden:

require 'rake' 
load 'path/to/your/tasks.rake' 

Auch bei thor vs. rake einen Blick darauf werfen.