This project is archived and is in readonly mode.
named route named 'task' or 'desc' causes problems with rake command
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
-
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.