Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

This project is archived and is in readonly mode.

named route named 'task' or 'desc' causes problems with rake command

#1010

With a config/routes.rb file like this,


ActionController::Routing::Routes.draw do |map|
  map.with_options :controller => 'tasks' do |t|
    t.task 'someurl', :action => 'index'
  end
end

% rake --trace routes

(or some other rake tasks like db:migrate) command fails with the following strange error.


** Invoke routes (first_time)
** Invoke environment (first_time)
** Execute environment
rake aborted!
Unrecognized keys in task hash: [:action, :controller]
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1656:in `resolve_args'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1610:in `define_task'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:651:in `define_task'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:758:in `task'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/option_merger.rb:14:in `send!'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/option_merger.rb:14:in `method_missing'
/Users/matsuda/work/src/rails/task_routes_bug/config/routes.rb:3
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/core_ext/object/misc.rb:48:in `with_options'
/Users/matsuda/work/src/rails/task_routes_bug/config/routes.rb:2
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.1.1/lib/action_controller/routing/route_set.rb:207:in `draw'
/Users/matsuda/work/src/rails/task_routes_bug/config/routes.rb:1
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:503:in `load'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:503:in `load'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:355:in `new_constants_in'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:503:in `load'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.1.1/lib/action_controller/routing/route_set.rb:253:in `load_routes!'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.1.1/lib/action_controller/routing/route_set.rb:233:in `load!'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.1.1/lib/action_controller/routing/route_set.rb:248:in `reload'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/initializer.rb:418:in `initialize_routing'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/initializer.rb:158:in `process'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/initializer.rb:97:in `send'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/initializer.rb:97:in `run'
/Users/matsuda/work/src/rails/task_routes_bug/config/environment.rb:13
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:510:in `require'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:355:in `new_constants_in'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:510:in `require'
/opt/local/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/tasks/misc.rake:3
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in `call'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in `execute'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in `each'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in `execute'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:508:in `invoke_with_call_chain'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in `synchronize'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in `invoke_with_call_chain'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:518:in `invoke_prerequisites'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1183:in `each'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1183:in `send'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1183:in `each'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:515:in `invoke_prerequisites'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:507:in `invoke_with_call_chain'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in `synchronize'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in `invoke_with_call_chain'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:494:in `invoke'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1931:in `invoke_task'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `top_level'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `each'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `top_level'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1948:in `standard_exception_handling'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1903:in `top_level'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1881:in `run'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1948:in `standard_exception_handling'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1878:in `run'
/opt/local/lib/ruby/gems/1.8/gems/rake-0.8.1/bin/rake:31
/opt/local/bin/rake:19:in `load'
/opt/local/bin/rake:19

Same problem occurs with map.namespace like this,


  map.namespace :admin do |admin|
    admin.task 'someurl', :controller => 'tasks', :action => 'index'
  end

and a named route 'desc' also causes

wrong number of arguments (2 for 1) error.

I tried Rails 2.1.1, 2.0.4 and edge, Rake 0.8.1 and Rake 0.8.2, all of which resulted in the same kind of error.

Reported by Akira Matsuda · September 10th, 2008 @ 11:09 AM

State: wontfix
Milestone: 2.x
Assigned to: nobody
Importance: none

Activity

  1. Frederick Cheung
    Frederick Cheung
    • State changed from new to wontfix

    The map object has a little bit of niceness that means that you can write

    
      map.some_route, ...
    

    instead of

    
      map.named_route :some_route, ...
    

    This niceness goes via method missing so it can't work on any preexisting methods (eg you couldn't make a named_route called connect with the short form). task and desc and added as top level methods by rake and so you can't use those either.

    December 19th, 2008 @ 06:42 PM