Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the new format for rake tasks? (task :t, arg, :needs => [deps] versus task :t, [args] => [deps])

I'm using Rails 3.1 beta with Ruby 1.9.2 and rake 0.9.2, and have a bunch of rake tasks I've written. Here is an example:

namespace :data do
  desc "dump the nodes and edges for a graph"
  task :dump_graph, :species_id, :needs => :environment do |t,args|
    args.with_defaults(:species_id => 'Hs')
    # ...
  end
end

When my rails app loads these rake tasks, however, I now get the following warning repeated once for each rake task:

    at /home/user/railsapp/lib/tasks/data/dump_graph.rake:3:in `block in <top (required)>'
WARNING: 'task :t, arg, :needs => [deps]' is deprecated.  Please use 'task :t, [args] => [deps]' instead.

I've experimented with rearranging the arguments in several different ways, but I'm not clear on exactly what my task should look like now.

Does rake expect me to give the individual dependencies? How do I define these in a rake task if the dep is the rails environment?

A link to updated documentation would be an acceptable answer! I've Googled and Googled, but no luck.

(And yes, I realize that the format is given in the error message. But that format does not appear to be correct, based on the variations I've tried.)

like image 520
Translunar Avatar asked Jun 07 '11 19:06

Translunar


People also ask

What is a rake file?

Rake is a software task management and build automation tool created by Jim Weirich. It allows the user to specify tasks and describe dependencies as well as to group tasks in a namespace. It is similar in to SCons and Make.

How do I run a rake task in Ruby on Rails?

Go to Websites & Domains and click Ruby. After gems installation you can try to run a Rake task by clicking Run rake task. In the opened dialog, you can provide some parameters and click OK - this will be equivalent to running the rake utility with the specified parameters in the command line.

How do I list a rake task?

You can get a list of Rake tasks available to you, which will often depend on your current directory, by typing rake --tasks . Each task has a description, and should help you find the thing you need.


2 Answers

I know it is sometimes hard to decipher but the error message gives you the new format:

task :t, [args] => [deps]

So for your example:

task :dump_graph, :species_id => :environment

http://www.postal-code.com/binarycode/2011/06/02/rake-needs-deprecated/

like image 99
Matthew Boehlig Avatar answered Oct 21 '22 11:10

Matthew Boehlig


The usage which works for me is:

task :task_name, [:argument] => :environment

I guess if you had several dependencies to list, deps would need the array notation.

I've no idea why a single argument requires the array notation - running the rake task with --trace gives an error about the :argument symbol not responding to the empty? method.

like image 40
msharp Avatar answered Oct 21 '22 11:10

msharp