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. Yes, my
beginning rails book omitted that important detail too.
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 H., Mr. Swift L. escribi:
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?
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
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.
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.
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.
.
.
.
.
.
.
…
.
.
.
.
.
.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.