Reputation: 11817
On a freshly created Rails project (generated by rails someName
), one can run some 'default' rake tasks like:
rake test
rake db:migrate
Question is, where does these tasks get described? The default Rakefile
doesn't have all these tasks.
Furthermore, I checked out some project that uses rspec
and I am able to run rake spec
to run all the tests. Where does the spec
target defined?
Upvotes: 78
Views: 26424
Reputation: 5291
To find the specific files and line numbers where a task is defined and/or modified, do this:
Start a rails console:
rails c
Then run these commands:
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 basically can track the locations internally and has a nifty method to show them upon request. The above code basically loads rake, tells Rake to track the file locations, loads the Rakefile (and all other included ones), finds the task in question, and calls the locations method on it.
From sameers comment, for rake v 10.1.0 and possibly older versions of rake you might have to call: tsk.actions instead of tsk.locations
Upvotes: 24
Reputation: 5962
To list all tasks:
rake -P
Since many tasks come from gems you install it's hard to know which ones are added...
Upvotes: 2
Reputation: 21180
Rake tasks are automatically loaded from the folder structure lib/tasks/*.rake
When we are talking about the task db:migrate for example, it is located within the rails gem in lib/tasks/databases.rake
So for a specific project, you will always have the tasks within the project folder structure as well as all tasks within the specified gems.
Upvotes: 56
Reputation: 87416
The project you checked out probably uses the rspec-rails gem. That gem defines the spec
task. You can see the source code for it here:
https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/tasks/rspec.rake
Upvotes: 1
Reputation: 1325
If by described you mean defined, rake -W is your friend. Example:
$ 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)>'
Just found this out today :)
Upvotes: 124
Reputation: 3809
You didn't specify which version of rails you're using but in 3.0.7 the db
tasks are located in the ActiveRecord gem in
lib/active_record/railties/databases.rake
As of rails version 3.2.7, the tasks are still where I stated above.
Upvotes: 5
Reputation: 8252
In Rails 3 the railties
gem defines a lot of rake tasks.
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
If your $EDITOR
is configured, you can easily see them yourself with the open_gem
gem:
gem install open_gem
gem open railties
Upvotes: 2