我想在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'] )
Run Code Online (Sandbox Code Playgroud)
但是,如果我为Mysql2连接尝试相同的技巧,我会收到一个错误:
client = Mysql2::Client.new(dbconfig['production'])
Run Code Online (Sandbox Code Playgroud)
显然语法不同,我需要这样的东西:
client = Mysql2::Client.new(:host => "localhost", :username => "user", :password => 'password', :database => 'db', :socket => '/tmp/mysql.sock')
Run Code Online (Sandbox Code Playgroud)
但是不想直接在脚本中公开用户名和密码.
那我怎么能从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')
Run Code Online (Sandbox Code Playgroud)
简单地做Mysql2::Client.new(config)就行不通,因为它不会拿起用户名和密码.
jhc*_*ran 11
任何接受散列的方法都可以使用YAML解析的结果.
你可能有两个问题:
以下代码应该有效:
config = YAML::load_file("config/database.yml")["development"]
config["host"] = config["hostname"]
client = Mysql2::Client.new(config)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5260 次 |
| 最近记录: |