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开发者_StackOverflow: '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.)
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/
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.
精彩评论