Rails Table Doesn’t exist!? Yes it does!

It’s happened to me twice in the last couple of weeks, and this time I knew exactly what I’d done, so here’s the solution if you make the same bad and non-“Rails Way” mistake I did.

dave@infinity:~/$ rake RAILS_ENV=production db:schema:load
(in /apps/special)
rake aborted!

Mysql::Error: Table 'special_production.pages' doesn't exist: SHOW FIELDS FROM `pages`

(See full trace by running task with --trace)

In my routes.rb file I had specified a route as such:
# map.connect 'special-day', :controller => 'pages', :action=>'show',
:id=>Page.find_by_title("Special Day").id

DON’T DO THIS. Not sure in what way it struck me as an overly good idea, but just don’t.
Strip that route out of your code and if necessary replace it as such:

# map.connect 'special-day', :controller => 'pages', :action=>'special-day'

What threw me about this problem is that I thought there was an issue in my schema.rb or migrations, this isn’t the case: ‘rake’ is trying to load the environment and falls over because ‘Pages’ hasn’t got going yet.

Don’t forget when you’re finished you may need to re-setup and migrate (cap deploy:setup / cap deploy:migrations) before your site will go.

P.S. This (silliness) never went into production!