syntax error, unexpected ':', expecting kEND

My db:migrate code as generated by ROR refuses to run. I'm running MySQL as the db, and *think* I have everything installed and configured correctly. I've tried deletion of the colon, quoting with single and double quotes, and nothing seems to work, I just keep getting different syntax errors. I'm new to ROR, but had a similar version working on a different machine with a Debian install, and this is on gOS, an Ubuntu derivative (it pretty much sucks(give me something that isn't broken by design.)) Code and a trace are copied below. Does anybody know how to solve this?

001_create_cars.rb:

class CreateCars < ActiveRecord::Migration   def self.up     create_table :cars do |t|       t.varchar(64) :Title       t.varchar(255) :Img       t.varchar(64) :Maker       t.varchar(64) :Year       t.text :Desc       t.varchar(64) :Price       t.boolean :Show       t.boolean :Sold

      t.timestamps : ID     end   end

  def self.down     drop_table :cars   end end

rake db:migrate --trace

(in /usr/local/aptana/workspace/CarSales) rake db:migrate ** Invoke db:migrate (first_time) ** Invoke environment (first_time) ** Execute environment ** Execute db:migrate rake aborted! ./db/migrate//001_create_cars.rb:4: syntax error, unexpected ':', expecting kEND       t.varchar(64) :Title                      ^ ./db/migrate//001_create_cars.rb:5: syntax error, unexpected ':', expecting kEND       t.varchar(255) :Img                       ^ ./db/migrate//001_create_cars.rb:6: syntax error, unexpected ':', expecting kEND       t.varchar(64) :Maker                      ^ ./db/migrate//001_create_cars.rb:7: syntax error, unexpected ':', expecting kEND       t.varchar(64) :Year                      ^ ./db/migrate//001_create_cars.rb:9: syntax error, unexpected ':', expecting kEND       t.varchar(64) :Price                      ^ /var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load' /var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load' /var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in' /var/lib/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load' /var/lib/gems/1.8/gems/activerecord-2.0.2/lib/active_record/migration.rb:360:in `migration_classes' /var/lib/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/mysql_adapter.rb:286:in `inject' /var/lib/gems/1.8/gems/activerecord-2.0.2/lib/active_record/migration.rb:359:in `each' /var/lib/gems/1.8/gems/activerecord-2.0.2/lib/active_record/migration.rb:359:in `inject' /var/lib/gems/1.8/gems/activerecord-2.0.2/lib/active_record/migration.rb:359:in `migration_classes' /var/lib/gems/1.8/gems/activerecord-2.0.2/lib/active_record/migration.rb:339:in `migrate' /var/lib/gems/1.8/gems/activerecord-2.0.2/lib/active_record/migration.rb:307:in `up' /var/lib/gems/1.8/gems/activerecord-2.0.2/lib/active_record/migration.rb:298:in `migrate' /var/lib/gems/1.8/gems/rails-2.0.2/lib/tasks/databases.rake:85 /usr/lib/ruby/1.8/rake.rb:387:in `call' /usr/lib/ruby/1.8/rake.rb:387:in `execute' /usr/lib/ruby/1.8/rake.rb:387:in `each' /usr/lib/ruby/1.8/rake.rb:387:in `execute' /usr/lib/ruby/1.8/rake.rb:357:in `invoke' /usr/lib/ruby/1.8/rake.rb:350:in `synchronize' /usr/lib/ruby/1.8/rake.rb:350:in `invoke' /usr/lib/ruby/1.8/rake.rb:1924:in `run' /usr/lib/ruby/1.8/rake.rb:1924:in `each' /usr/lib/ruby/1.8/rake.rb:1924:in `run' /usr/bin/rake:4

With this syntax I think you're passing '64' as the only parameter:

t.varchar(64) :Title

Here's how I'm used to seeing it:

t.string :title, :limit => 64

-Mack

Mack Earnhardt wrote:

With this syntax I think you're passing '64' as the only parameter:

t.varchar(64) :Title

Here's how I'm used to seeing it:

t.string :title, :limit => 64

-Mack

On Wed, Apr 23, 2008 at 12:50 PM, Charles Hernandez

Hi Mack, Thanks for the quick response, the '64' is to tell mysql how long to make the field. The same code worked (at least I seem to remember it being the same form "t.fieldtype(size) :Fieldname") worked previously. I just can't figure out what the problem is with the colon placement, and I really don't know what the 'kEND' is supposed to be. Since the generator created the code, you'd kind of expect it to run. :S

Charles Hernandez wrote:

Mack Earnhardt wrote:

With this syntax I think you're passing '64' as the only parameter:

t.varchar(64) :Title

Here's how I'm used to seeing it:

t.string :title, :limit => 64

-Mack

On Wed, Apr 23, 2008 at 12:50 PM, Charles Hernandez

Hi Mack, Thanks for the quick response, the '64' is to tell mysql how long to make the field. The same code worked (at least I seem to remember it being the same form "t.fieldtype(size) :Fieldname") worked previously. I just can't figure out what the problem is with the colon placement, and I really don't know what the 'kEND' is supposed to be. Since the generator created the code, you'd kind of expect it to run. :S

Correct style is t.string :title, :limit =>64

Your mixing how you do it in MySQL, with how you do it in Rails.

Charles Hernandez wrote:

Duh, I figured it out, I was remembering the datatypes in the DB itself. Defective brain, sorry to have taken your time.