On Jan 12, 2009, at 3:07 PM, Matthew Pounsett wrote:
> Rob Biedenharn wrote:
>>
>> Did you actually run:  rake --trace db:migrate
>> so you can see where the problem happens?
>
> I did, but the trace information is meaningless to me.  I'll paste  
> it in
> below.
>
>> That's the first thing to do.  Since the OP's error happened over 2
>> years ago (!), you might as well consider your error "new" and post
>> the details.  Anyone who generally follows via the mailing list isn't
>> even going to know what the OP context is (unless they go looking  
>> like
>> I had to.)
>
> Good point.  I'm accessing this through a web forum (found the  
> original
> post through google) and didn't realize there was as associated  
> mailing
> list (though now I see that it says so at the bottom of the page).
>
> As noted, I'm working from the paper version of the AWDwR book.  I'm
> using Locomotive2 (2.0.8) as my Ruby/Rails install on MacOS.
>
> In section 6.2 of the book where the second migration is created, I  
> ran
> into the following error:
>
> % rake db:migrate
> (in /Users/mattp/devel/ruby/depot)
> == AddPrice: migrating
> ========================================================
> -- add_column(:products, :price, :decimal, {:scale=>2, :default=>0, 
> :precision=>8})
> rake aborted!
> You have a nil object when you didn't expect it!
> You might have expected an instance of Array.
> The error occured while evaluating nil.[]
>
> (See full trace by running task with --trace)
>
> After finding this thread with the note about rake 1.1.6 vs 1.2
> compatibility of the book's instructions, I upgraded rake:
>
> % which gem
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/bin//gem
>
> % sudo gem install rails --version 1.2
> Bulk updating Gem source index for: http://gems.rubyforge.org
> Install required dependency activesupport? [Yn]
> Install required dependency activerecord? [Yn]
> Install required dependency actionpack? [Yn]
> Install required dependency actionmailer? [Yn]
> Install required dependency actionwebservice? [Yn]
> Successfully installed rails-1.2.0
> Successfully installed activesupport-1.4.0
> Successfully installed activerecord-1.15.0

You might want to see where the various version of your gems are  
located:
        gem list -d activerecord

I suspect your attempts at installing gems are not affecting the ones  
inside the Locomotive bundle.

>
> Successfully installed actionpack-1.13.0
> Successfully installed actionmailer-1.3.0
> Successfully installed actionwebservice-1.2.0
> Installing ri documentation for activesupport-1.4.0...
>
> lib/active_support/dependencies.rb:52:16: Unrecognized directive  
> 'nodoc'
> Installing ri documentation for activerecord-1.15.0...
> Installing ri documentation for actionpack-1.13.0...
>
> lib/action_controller/routing.rb:1050:30: ':' not followed by  
> identified
> or operator
>
> lib/action_controller/routing.rb:1054:39: ':' not followed by  
> identified
> or operator
> Installing ri documentation for actionmailer-1.3.0...
> Installing ri documentation for actionwebservice-1.2.0...
> Installing RDoc documentation for activesupport-1.4.0...
>
> lib/active_support/dependencies.rb:52:16: Unrecognized directive  
> 'nodoc'
> Installing RDoc documentation for activerecord-1.15.0...
> Installing RDoc documentation for actionpack-1.13.0...
>
> lib/action_controller/routing.rb:1050:30: ':' not followed by  
> identified
> or operator
>
> lib/action_controller/routing.rb:1054:39: ':' not followed by  
> identified
> or operator
> Installing RDoc documentation for actionmailer-1.3.0...
> Installing RDoc documentation for actionwebservice-1.2.0...
>
>
> % rails --version
> Rails 1.2.0
>
> However, after that upgrade I'm still seeing the same error from rake
> when I try the db migration.
>
> Doing the migrate with --trace now gives this output (sorry, I don't
> have the output prior to my rails update)
>
> % rake db:migrate --trace
> (in /Users/mattp/devel/ruby/depot)
> ** Invoke db:migrate (first_time)
> ** Invoke environment (first_time)
> ** Execute environment
> ** Execute db:migrate
> == AddPrice: migrating
> ========================================================
> -- add_column(:products, :price, :decimal, {:scale=>2, :default=>0, 
> :precision=>8})
> rake aborted!
> You have a nil object when you didn't expect it!
> You might have expected an instance of Array.
> The error occured while evaluating nil.[]
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> connection_adapters/abstract/schema_statements.rb:259:in
> `type_to_sql'

Note that this error is happening from within the Locomotive bundled  
activerecord-1.14.4

Possibly even more importantly, this is in the abstract adapter rather  
than, say, the MySQL adapter.

What database is defined in your config/database.yml file?  Do you  
have that adapter installed?  Does it support the :decimal type?

>
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> connection_adapters/abstract/schema_statements.rb:122:in
> `add_column'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> migration.rb:273:in
> `method_missing'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> migration.rb:257:in
> `say_with_time'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/1.8/benchmark.rb:293:in
> `measure'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> migration.rb:257:in
> `say_with_time'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> migration.rb:271:in
> `method_missing'
> ./db/migrate//002_add_price.rb:3:in `real_up'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> migration.rb:210:in
> `migrate'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/1.8/benchmark.rb:293:in
> `measure'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> migration.rb:210:in
> `migrate'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> migration.rb:333:in
> `migrate'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> migration.rb:328:in
> `migrate'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> migration.rb:295:in
> `up'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ 
> migration.rb:286:in
> `migrate'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/rails-1.1.6/lib/tasks/databases.rake:4
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake.rb:387:in
> `execute'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake.rb:387:in
> `execute'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake.rb:357:in
> `invoke'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/1.8/thread.rb:135:in
> `synchronize'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake.rb:350:in
> `invoke'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake.rb:1906:in
> `run'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake.rb:1906:in
> `run'
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/lib/ruby/gems/1.8/gems/rake-0.7.1/bin/rake:7
> /Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/ 
> i386/bin//rake:18
>
>
> In case of some typo that I'm not spotting (I've double and triple
> checked, but that doesn't necessarily mean I've caught everything) I'm
> also going to paste the new migration that I'm trying to run:
>
> % cat db/migrate/002_add_price.rb
> class AddPrice < ActiveRecord::Migration
>  def self.up
>    add_column :products, :price, :decimal, :precision => 8, :scale =>
> 2, :default => 0
>  end
>
>  def self.down
>    remove_column :products, :price
>  end
> end
>
> Thanks for any help!
>   Matt

It's also possible that there's some subtle mismatch between the  
versions of things expected by the book and the Locomotive bundle.  I  
don't (and haven't) use(d) Locomotive, so I may be casting more  
suspicion on it than it deserves. ;-)

Do you get the same/similar error if you change :decimal to :float (or  
perhaps :real)?

-Rob


Rob Biedenharn          http://agileconsultingllc.com
[email protected]


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to