all-number passwords in database.yml

A small posting in english, as it might help a lot of people.

When using Ruby on Rails, if you keep getting a “could not connect to database” while you are 100% sure the username and password you entered in your database.yml is correct, and you can’t find what is causing it… observe

Database.yml:

production:
  username: dontcare
  password: 0123456
  host: localhost
  ...

When we connect to the database using the RoR console, we get the following:

$ RAILS_ENV=production script/console 
Loading production environment.
>> ActiveRecord::Base.establish_connection
=> #<activerecord ::Base::ConnectionSpecification:0x40b0c0a4 @adapter_method="mysql_connection", 
@config={:host=>"localhost", :username=>"dontcare", :database=>"foobar", 
:adapter=>"mysql", :password=>42798}>
</activerecord>

(wrapped the output so it would be readable)

Take a close look to the last field in the output, the password has changed from “0123456″ to “42798″. This is, however, expected behavior, as a leading zero is interpreted as the sign the number following the zero is a octal representation of a number. This has even nothing to do with rails, this is default ruby:

$ irb
irb(main):001:0> a = 0123
=> 83

The solution is to quote your password:

production:
  username: dontcare
  password: '0123456'
  host: localhost
  ...

By the way, remember these two lines, they help you test the database connection; you can even omit the first one, but then you won’t see the actual connection parameters, which helped me discover the cause of this problem.

ActiveRecord::Base.establish_connection
ActiveRecord::Base.connection.select_all('SHOW TABLES')

Just start a console, and use these to test your database.

Tags: , , ,

2 Responses to “all-number passwords in database.yml”

  1. Tom Klaasen Says:

    Onlangs hebben wij hetzelfde probleem voorgehad bij een text veldje in een HTTP form die met Java verwerkt werd. Dat was ook onverwachts, to say the least.

  2. Radio Detector Says:

    Thanks for sharing the information above, it helps me a lot.