Ruby脚本使用没有Rails的database.yml连接到Mysql2

前端之家收集整理的这篇文章主要介绍了Ruby脚本使用没有Rails的database.yml连接到Mysql2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在 Ruby脚本中使用MysqL2 gem连接到MysqL数据库,但是没有Rails或ActiveRecord,但是读取config / database.yml文件是为了不直接在Ruby脚本中公开用户名和密码.如果我像这样使用ActiveRecord,我可以连接:
dbconfig = YAML::load(File.open('config/database.yml'))
ActiveRecord::Base.establish_connection( dbconfig['production'] )

但是,如果我为MysqL2连接尝试相同的技巧,我会收到一个错误

client = MysqL2::Client.new(dbconfig['production'])

显然语法不同,我需要这样的东西:

client = MysqL2::Client.new(:host => "localhost",:username => "user",:password => 'password',:database => 'db',:socket => '/tmp/MysqL.sock')

但是不要直接在脚本中公开用户名和密码.

那我怎么能从config / database.yml中获取所有数据并将其传递给MysqL2 :: Client.new()方法

谢谢.

编辑

只是想澄清一下,为了最终使它工作,我通过这样做修改了一些有关的答案:

client = MysqL2::Client.new(:host => dbconfig['hostname'],:username => dbconfig['username'],:password => dbconfig['password'],:database => dbconfig['database'],:socket => '/tmp/MysqL.sock')

简单地做MysqL2 :: Client.new(config)是行不通的,因为它不会拿起用户名和密码.

解决方法

任何接受散列的方法都可以使用YAML解析的结果.

你可能有两个问题:

> YAML.load_file返回一个哈希,其中键是字符串而不是符号.从我从https://github.com/brianmario/mysql2/blob/master/lib/mysql2/client.rb#L17https://github.com/brianmario/mysql2/blob/master/lib/mysql2.rb#L36读到的它接受符号和字符串,所以这不是问题.
> MysqL2 connect方法使用不同的键,比如host.yml中的host而不是hostname,如果你不修改或不能修改database.yml,你可以考虑创建一个转换键的方法.

以下代码应该工作:

config = YAML::load_file("config/database.yml")["development"]
config["host"] = config["hostname"]

client = MysqL2::Client.new(config)

猜你在找的Ruby相关文章