How do I make "rake db:migrate" work properly?

I'm going through the 4th (current) edition of the book _Agile Web Development with Rails_. I'm using Ubuntu 11.04 in VirtualBox with ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-linux], gem 1.3.7, and Rails 3.0.5. (I had to downgrade Rails from 3.1.0.)

I've gone through the exercises in chapter 2 with no problems. I'm now in chapter 6, and the "rake db:migrate" command malfunctions. The error message I'm getting is:

WARNING: Global access to Rake DSL methods is deprecated. Please include     ... Rake::DSL into classes and modules which use the Rake DSL methods. WARNING: DSL method Depot::Application#task called at /var/lib/gems/ 1.8/gems/railties-3.0.5/lib/rails/application.rb:214:in `initialize_tasks' rake aborted!

What exactly are the Rake DSL methods, and what does deprecated global access mean, and how do I fix this?

Curiously, you listed the versions of every program except the one that is throwing the error.

I've gone through the exercises in chapter 2 with no problems.

Not very helpful for people who don't have the book.

I don't know if this is your problem or not....but in any case you should never be issuing the command:

rake db:migrate

The whole idea behind Bundler and your Gemfile is to specify which gems you want to use for your app. To use the gems in your Gemfile when executing commands, you need to proceed the command with 'bundle exec':

bundle exec rake db:migrate

That makes sure you are using the rake gem specified in your Gemfile.

and

bundle exec rails generate ...

That makes sure you are using the rails gem in your Gemfile.

Hi,

     With rails 3.1 and some new gems versions the books can become complicated.

     There are better ways to do it, but in your case (starting from zero) I'll suggest:

     1. Delete new versions of rails:      gem uninstall rails

     Select "All versions"

     2. Install the right rails gem for the book (between 3.0.1 and 3.0.9 all work)     gem install rails --version 3.0.9

     3. Delete newer versions of rake and stay with the old one       gem uninstall rake       gem install rake --version 0.8.7

     4. Start the project from zero (As far as I remember it wasn't a lot of work).      rails new depot      rails generate scaffold ....      rake db:migrate

     Greetings,

El 04/09/2011 22:29, Jason Hsu, Mr. Swift Linux escribi�:

Curiously, you listed the versions of every program except the one that is throwing the error.

> I've gone through the exercises in chapter 2 with no problems.

Not very helpful for people who don't have the book.

I don't know if this is your problem or not....but in any case you should never be issuing the command:

rake db:migrate

The whole idea behind Bundler and your Gemfile is to specify which gems you want to use for your app. To use the gems in your Gemfile when executing commands, you need to proceed the command with 'bundle exec':

bundle exec rake db:migrate

That makes sure you are using the rake gem specified in your Gemfile.

That's not the whole story. If just running rake (without the bundle exec) selected a version of rake that was incompatible with what's in the Gemfile/Gemfile.lock then bundler produces an appropriate version message. The problem is the the Gemfile generated by default in a rails app didn't specify a version of rake (possibly because until recently rake hadn't changed much - 0.8.7 was released in May 2009 and 0.9 was released in May 2011), so bundler will pick the most recent version of rake as the one to use. Unfortunately rake 0.9 had some incompatible changes. Newer versions of rails support rake 0.9.x (I think the first such rails version was 3.0.9). You could either switch to the latest 3.0.x version or you need to specify in your Gemfile that you want rake 0.8.7

Fred

Frederick Cheung wrote in post #1020189:

Miquel Cubel wrote in post #1020180:

Hi,

     With rails 3.1 and some new gems versions the books can become complicated.

     There are better ways to do it, but in your case (starting from zero) I'll suggest:

     1. Delete new versions of rails:      gem uninstall rails

     Select "All versions"

     2. Install the right rails gem for the book (between 3.0.1 and 3.0.9 all work)     gem install rails --version 3.0.9

     3. Delete newer versions of rake and stay with the old one       gem uninstall rake       gem install rake --version 0.8.7

     4. Start the project from zero (As far as I remember it wasn't a lot of work).      rails new depot      rails generate scaffold ....      rake db:migrate

     Greetings,

Ignore all that. . . . . . . .. . . . . . .

Frederick Cheung wrote in post #1020189:

>> rake db:migrate

>> The whole idea behind Bundler and your Gemfile is to specify which gems >> you want to use for your app. To use the gems in your Gemfile when >> executing commands, you need to proceed the command with 'bundle exec':

>> bundle exec rake db:migrate

>> That makes sure you are using the rake gem specified in your Gemfile.

> That's not the whole story. If just running rake (without the bundle > exec) selected a version of rake that was incompatible with what's in > the Gemfile/Gemfile.lock then bundler produces an appropriate version > message.

That's not what this says:

=== In some cases, running executables without bundle exec may work, if the executable happens to be installed in your system and does not pull in any gems that conflict with your bundle.

Sorry, by version message I meant an error message about how the version of gems pulled in by not using bundle exec conflict with the versions bundler would had picked (i think it even hints at using bundle exec). Anyway, using bundle exec won't help if what is in Gemfile/ Gemfile.lock is causing bundler to select rake 0.9 when in fact the OP wants rake 0.8.7.

Fred