I'd like to connect to a mysql database using the mysql2 gem in a Ruby script but without Rails or ActiveRecord, yet reading the config/database.yml file so as not to expose the user name and password directly inside the Ruby script. I can connect if I use ActiveRecord like this:
dbconfig = YAML::load(File.open('config/database.yml'))
ActiveRecord::Base.establish_connection( dbconfig['production'] )
But if I try the same trick for the Mysql2 connection I get an error:
client = Mysql2::Client.new(dbconfig['production'])
Obviuosly the syntax is different, I need something like:
client = Mysql2::Client.new(:host => "localhost", :username => "user", :password => 'password', :database => 'db', :socket => '/tmp/mysql.sock')
But don't want to expose the user name and password directly inside the script.
so how could I grab all the data from the config/database.yml and pass it to the Mysql2::Client.new()
method?
Thanks.
Edit
Just wanted to clarify that to finally get it to work I modified the accpeted answer a bit by doing this:
client = Mysql2::Client.new(:host => dbconfig['hostname'], :username => dbconfig['username'], :password => dbconfig['password'], :database => dbconfig['database'], :socket => '/tmp/mysql.sock')
Simply doing Mysql2::Client.new(config)
would not work because it would not pick up the username and password.