Auf einem frisch erstellten Rails-Projekt (generiert von rails someName
) können einige 'Standard'-Rake-Aufgaben ausgeführt werden wie:
rake test
rake db:migrate
- usw
Die Frage ist, wo werden diese Aufgaben beschrieben? Die Standardeinstellung Rakefile
enthält nicht alle diese Aufgaben.
Außerdem habe ich ein Projekt überprüft, das verwendet, rspec
und ich kann rake spec
alle Tests ausführen. Wo kommt diespec
definiert Ziel?
ruby-on-rails
ruby
rake
rakefile
Ryanprayogo
quelle
quelle
Antworten:
Rechenaufgaben werden automatisch aus der Ordnerstruktur geladen
lib/tasks/*.rake
Wenn wir zum Beispiel über die Aufgabe db: migrate sprechen, befindet sie sich innerhalb des Rails-Edelsteins in
lib/tasks/databases.rake
Für ein bestimmtes Projekt haben Sie also immer die Aufgaben in der Projektordnerstruktur sowie alle Aufgaben in den angegebenen Edelsteinen.
quelle
rake -W task:name
Wenn mit beschrieben Sie definiert meinen, ist Rechen -W Ihr Freund. Beispiel:
$ rake -W db:create
=>
rake db:create /path/to/ruby/gems/1.9.1/gems/activerecord-3.1.11/lib/active_record/railties/databases.rake:39:in `block in <top (required)>'
Habe das heute herausgefunden :)
quelle
Gehen Sie folgendermaßen vor, um die spezifischen Dateien und Zeilennummern zu finden, in denen eine Aufgabe definiert und / oder geändert wird:
Starten Sie eine Rails-Konsole:
Führen Sie dann die folgenden Befehle aus:
require 'rake' Rake::TaskManager.record_task_metadata=true Rake.application.load_rakefile tsk = Rake.application.tasks.find {|t| t.name =='my_task_name'} tsk.locations
Rake kann die Standorte grundsätzlich intern verfolgen und verfügt über eine raffinierte Methode, um sie auf Anfrage anzuzeigen. Der obige Code lädt im Grunde Rake, weist Rake an, die Dateispeicherorte zu verfolgen, lädt die Rake-Datei (und alle anderen enthaltenen), findet die betreffende Aufgabe und ruft die Speicherortmethode darauf auf.
Aus dem Kommentar von sameers geht hervor, dass Sie für Rake v 10.1.0 und möglicherweise ältere Versionen von Rake möglicherweise Folgendes aufrufen müssen: tsk.actions anstelle von tsk.locations
quelle
tsk.actions
Rake.application.tasks.find
. Möglicherweise müssen Sie auch eine Last senden, wenn diese für Sie privat ist.Rake.application.send(:load, 'Rakefile')
oder du könntest es einfach benutzenRake.application.load_rakefile
.Sie haben nicht angegeben, welche Schienenversion Sie verwenden, aber in 3.0.7
db
befinden sich die Aufgaben im ActiveRecord-Gem inAktualisieren:
Ab Rails Version 3.2.7 sind die Aufgaben immer noch dort, wo ich oben angegeben habe.
quelle
In Rails 3
railties
definiert der Edelstein viele Rechenaufgaben.railties-3.2.5/lib/rails/tasks/annotations.rake railties-3.2.5/lib/rails/tasks/documentation.rake railties-3.2.5/lib/rails/tasks/engine.rake railties-3.2.5/lib/rails/tasks/framework.rake railties-3.2.5/lib/rails/tasks/log.rake railties-3.2.5/lib/rails/tasks/middleware.rake railties-3.2.5/lib/rails/tasks/misc.rake railties-3.2.5/lib/rails/tasks/routes.rake railties-3.2.5/lib/rails/tasks/statistics.rake railties-3.2.5/lib/rails/tasks/tmp.rake railties-3.2.5/lib/rails/test_unit/testing.rake
Wenn Ihr
$EDITOR
konfiguriert ist, können Sie sie mit demopen_gem
Edelstein leicht selbst sehen :quelle
So listen Sie alle Aufgaben auf:
Da viele Aufgaben von Edelsteinen stammen, die Sie installieren, ist es schwer zu wissen, welche hinzugefügt werden ...
quelle
rails --help
könnte helfen, einige der Aufgaben zu zeigen, die Rake nicht tut :guides.rubyonrails.org/command_line.html#bin-railsDas Projekt, das Sie ausgecheckt haben, verwendet wahrscheinlich das Juwel rspec-Rails . Dieses Juwel definiert das
spec
Aufgabe. Den Quellcode dafür finden Sie hier:https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/tasks/rspec.rake
quelle