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
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
Das ist, was Sake für ist. Datamapper und Merb verwenden Sake erfolgreich.
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
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.
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.
Nur ein Wort der Warnung, ich konnte Rails nicht dazu bringen, 'Rake'-Tasks mit einer' .rake'-Erweiterung zu verwenden, die diese Methode verwenden. –
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 :) –
Was ich getan hatte, ist '' rb' stattdessen zu verwenden. Problem gelöst. :) –