Rake db:migrate "no such option: controller action" problem


#1

Hi,
I’ve getting weirdness when running rake db:migrate. This rails
project was originally created on windows. I don’t know if that makes
a difference?

This is the output from a --trace.

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
rake aborted!
no such option: controller action
/usr/lib/ruby/1.8/fileutils.rb:1424:in fu_check_options' /usr/lib/ruby/1.8/fileutils.rb:535:inremove’
/usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:816:in remove' /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.1/lib/active_support/option_merger.rb:14:insend’
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.1/lib/active_support/option_merger.rb:14:in
method_missing' /mnt/iriver/projects/routes/config/../config/routes.rb:27 /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.1/lib/active_support/core_ext/object/misc.rb:28:inwith_options’
/mnt/iriver/projects/routes/config/…/config/routes.rb:24
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.2/lib/action_controller/routing.rb:1139:in
draw' /mnt/iriver/projects/routes/config/../config/routes.rb:1 /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.1/lib/active_support/dependencies.rb:488:inload’
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.1/lib/active_support/dependencies.rb:488:in
load' /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.1/lib/active_support/dependencies.rb:342:innew_constants_in’
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.1/lib/active_support/dependencies.rb:488:in
load' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.2/lib/action_controller/routing.rb:1165:inload_routes!’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.2/lib/action_controller/routing.rb:1157:in
reload' /usr/lib/ruby/gems/1.8/gems/rails-1.2.2/lib/initializer.rb:287:ininitialize_routing’
/usr/lib/ruby/gems/1.8/gems/rails-1.2.2/lib/initializer.rb:111:in
process' /usr/lib/ruby/gems/1.8/gems/rails-1.2.2/lib/initializer.rb:43:insend’
/usr/lib/ruby/gems/1.8/gems/rails-1.2.2/lib/initializer.rb:43:in run' /mnt/iriver/projects/routes/config/../config/environment.rb:13 /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:ingem_original_require’
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in require' /usr/lib/ruby/gems/1.8/gems/rails-1.2.2/lib/tasks/misc.rake:3 /usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:399:incall’
/usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:399:in execute' /usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:399:ineach’
/usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:399:in execute' /usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:369:ininvoke’
/usr/lib/ruby/1.8/thread.rb:135:in synchronize' /usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:362:ininvoke’
/usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:376:in
invoke_prerequisites' /usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:1021:ineach’
/usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:1021:in send' /usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:1021:ineach’
/usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:375:in
invoke_prerequisites' /usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:368:ininvoke’
/usr/lib/ruby/1.8/thread.rb:135:in synchronize' /usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:362:ininvoke’
/usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:1935:in run' /usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:1935:ineach’
/usr/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:1935:in run' /usr/lib/ruby/gems/1.8/gems/rake-0.7.2/bin/rake:7 /usr/bin/rake:16:inload’
/usr/bin/rake:16

Any ideas?

Thanks,
Jord


#2

Hi, let’s see the file(s) that you’re trying to migrate (i.e.
${PROJECT_ROOT}/db/migrate )

Thanks,

-Conrad


#3

Hi, let’s see the file(s) that you’re trying to migrate (i.e.
${PROJECT_ROOT}/db/migrate )

Here they are. I’ve also tried removing these from the directory with
the same result. So, I don’t think the migrations themselves are to
blame.

class CreateCategories < ActiveRecord::Migration
def self.up
create_table :categories do |t|
t.column :name, :string
t.column :parent_id, :integer, :default => 0
end

# create some defaults
Category.create :name => 'Fruit and Veg'
Category.create :name => 'Bakery'

Category.create :name => 'Apples', :parent_id => 1
Category.create :name => 'Bananas', :parent_id => 1
Category.create :name => 'Potatoes', :parent_id => 1

Category.create :name => 'Cakes', :parent_id => 2
Category.create :name => 'Bread', :parent_id => 2
Category.create :name => 'Pastries', :parent_id => 2

end

def self.down
drop_table :categories
end
end

class CreateProducts < ActiveRecord::Migration
def self.up
create_table :products do |t|
t.column :name, :string
end
end

def self.down
drop_table :products
end
end

class AddProductCategoryJoinTable < ActiveRecord::Migration
def self.up
create_table :categories_products, :id => false do |t|
t.column :product_id, :integer
t.column :category_id, :integer
end
end

def self.down
drop_table :categories_products
end
end

class AddProducts < ActiveRecord::Migration
def self.up
Product.create :name => ‘Cherry Bakewell’, :category_ids => [6]
end

def self.down
end
end

I’ve now been able to test this on another windows box, and the same
happens. Not sure what’s going on?!

Cheers,
Jord


#4

Anyone? I’m not sure what’s happening here at all.


#5

Hi, thanks for getting back with some information. Anyway, it seems
to be an error with the last migration, AddProduct, because the
products table doesn’t have a ‘:category_ids’ field. Shouldn’t this
be called ‘:category_id’ ? Just a thought. Finally, I would
recommend thinking about what you would like to do and execute the
required steps in an incremental fashion.

For example, I performed the following actions so that you can see the
steps:

a) rails test2

b) cd test2

c) script/generate model category

d) # edit the file appropriate migration file

e) rake db:migrate

f) script/generate model product

g) # edit the file appropriate migration file

h) rake db:migrate

i) script/generate migration add_product_join_table

j) # edit the file appropriate migration file

k) rake db:migrate

l) script/generate migration add_product

m) # edit the file appropriate migration file

n) rake db:migrate

If you have any questions, please let me know.

Good luck,

-Conrad

ps: For additional information, please see AWDwRv2.


#6

Hi Jordan,

Anyone? I’m not sure what’s happening here at all.

Can we have a look at your config/routes.rb ?

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)


#7

Jordan :

Can we have a look at your config/routes.rb ?

You sure can. Sorry for the formatting.

ActionController::Routing::Routes.draw do |map|
[…]

cart actions

map.with_options :controller => ‘cart’ do |cart|
cart.show ‘/cart’, :action => ‘show’
cart.purchase ‘/cart/:id/add’, :action => ‘add’

Line 27 is the one below, right ?

cart.remove     '/cart/:id/remove', :action => 'remove'
cart.empty      '/cart/empty',      :action => 'empty'

end

1/ Do a simple script/console to check if you’ve got the same
bug.

2/ try to uncomment the line :
cart.remove ‘/cart/:id/remove’, :action => ‘remove’

to check if it’s responsible of the bug.

3/ you can also downgrade to rake 0.7.1 to see if the bug is
still there.

I don’t really understand what’s going on, but I suppose
it deals with the changes between Rake 0.7.1 to 0.7.2
rather than a migration problem.

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)


#8

Can we have a look at your config/routes.rb ?

You sure can. Sorry for the formatting.

ActionController::Routing::Routes.draw do |map|

map the route to the home page

map.home ‘/’, :controller => ‘catalog’, :action => ‘home’

admin mappings

map.admin ‘/admin’, :controller =>
‘admin/base’, :action => ‘dashboard’
map.orders_admin ‘/admin/orders/:action/:id’, :controller =>
‘admin/orders’
map.products_admin ‘/admin/products/:action/:id’, :controller =>
‘admin/products’

help page (mostly static stuff)

map.help ‘/help’, :controller => ‘pages’, :action => ‘help’

account actions

map.with_options :controller => ‘account’ do |account|
account.signup ‘/account/signup’, :action =>
‘signup’
account.login ‘/login’, :action =>
‘login’
account.logout ‘/logout’, :action =>
‘logout’
account.forgotten ‘/account/forgotten’, :action =>
‘forgotten’
account.reset ‘/account/reset/:reset_token’, :action =>
‘reset’, :defaults => { :reset_token => nil }
end

cart actions

map.with_options :controller => ‘cart’ do |cart|
cart.show ‘/cart’, :action => ‘show’
cart.purchase ‘/cart/:id/add’, :action => ‘add’
cart.remove ‘/cart/:id/remove’, :action => ‘remove’
cart.empty ‘/cart/empty’, :action => ‘empty’
end

map checkout actions

map.with_options :controller => ‘checkout’ do |checkout|
checkout.delivery_address ‘/checkout/delivery’, :action =>
‘delivery_address’
checkout.billing_address ‘/checkout/invoice’, :action =>
‘invoice_address’
checkout.payment ‘/checkout/payment’, :action =>
‘payment’
checkout.thanks ‘/checkout/thanks’, :action =>
‘thanks’
end

map shop actions

map.with_options :controller => ‘catalog’ do |catalog|
catalog.product ‘/product/:id’, :action =>
‘show’
catalog.product_zoom ‘/product/:id/zoom/:pic_id’, :action =>
‘zoom’, :requirements => { :pic_id => /\d+/ }, :defaults => { :pic_id
=> 1 } #default to the first pic
catalog.category ‘:category’, :action =>
‘category’
catalog.department ‘:category/:department’, :action =>
‘department’
end

catchall route (raise status 404 here?)

map.connect ‘*path’ , :controller => ‘pages’ , :action =>
‘unrecognized’
end


#9

Hi Jean-François,

2/ try to uncomment the line :
cart.remove ‘/cart/:id/remove’, :action => ‘remove’

to check if it’s responsible of the bug.

Yes, it was. After you mentioned the routes.rb file, I actually went
through the file and commented out each line to see if any was
responsible for this and found this problem. I’ve now renamed the
route:

cart.remove_item ‘/cart/:id/remove’, :action => ‘remove’

Everything works now :slight_smile:

Thanks very much for your help :slight_smile:
Jord