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

标签 ruby yaml 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 解析的结果。

你可能有两个问题:

下面的代码应该可以工作:

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

client = Mysql2::Client.new(config)

关于Ruby 脚本使用没有 Rails 的 database.yml 连接到 Mysql2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12688478/

相关文章:

javascript - 弹出窗口在我第三次打开时才按预期运行吗?

ruby-on-rails - Rails 服务器未以 HTTP 解析错误、格式错误的请求 () 开头:#<Puma::HttpParserError:

encryption - 在公共(public)存储库中使用 Travis-CI 构建通知 Hook 保持 API key 完整性

python - 我可以在 yaml/pyyaml 中转储空白而不是 null 吗?

mysql - Rails 和 Mysql2 拒绝用户 'root' @'localhost' 访问(使用密码 : NO)

ruby-on-rails - Ruby on Rails : Is there anything similar to C++ virtual methods for subclasses?

ruby - 将 Json 响应与 Json 文本文件进行比较

java - 使用 yamlbeans 反序列化嵌套类

mysql - Ruby - MySQL 服务器已经消失(Mysql2::Error)

ruby-on-rails - 从 Mysql2::Error 中救援