【问题标题】:Accessing SQL using ruby with MAMP as a local server使用 ruby​​ 和 MAMP 作为本地服务器访问 SQL
【发布时间】:2017-05-03 02:21:29
【问题描述】:

我正在尝试使用 ruby​​ 作为前端工具来访问我的 SQL 数据库,但是在此过程中我遇到了一些错误。首先,我使用 MAMP 作为在我的计算机上设置本地 SQL 服务器的工具,使用 MYSQL 工作台访问 MAMP 没有问题,并且我已经设置了几个数据库。但是,当我尝试使用以下代码通过 Ruby 访问数据库时:

require 'mysql'

begin
  connection = Mysql.new 'localhost', 'root', 'root', nil, 8889
  connection.list_dbs.each do |db|
    puts db
  end

rescue Mysql::Error => e
  puts e.errno
  puts e.error

ensure
  connection.close if connection
end

我在终端收到此错误:

Vetles-MacBook-Pro:ruby Vetle$ ruby​​ sql.rb /Library/Ruby/Gems/2.0.0/gems/ruby-mysql-2.9.14/lib/mysql/protocol.rb:150:in initialize': No such file or directory - "/tmp/mysql.sock" (Errno::ENOENT) from /Library/Ruby/Gems/2.0.0/gems/ruby-mysql-2.9.14/lib/mysql/protocol.rb:150:innew' 来自 /Library/Ruby/Gems/2.0.0/gems/ruby-mysql-2.9.14/lib/mysql/protocol.rb:150:in block in initialize' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/timeout.rb:52:intimeout' 来自 /Library/Ruby/Gems/2.0.0/gems/ruby-mysql-2.9.14/lib/mysql/protocol.rb:147:in initialize' from /Library/Ruby/Gems/2.0.0/gems/ruby-mysql-2.9.14/lib/mysql.rb:115:innew' 来自 /Library/Ruby/Gems/2.0.0/gems/ruby-mysql-2.9.14/lib/mysql.rb:115:in connect' from /Library/Ruby/Gems/2.0.0/gems/ruby-mysql-2.9.14/lib/mysql.rb:50:innew' 来自 sql.rb:4:in `'

我想我必须更改 mysql.sock 的位置,但我不完全确定如何执行此操作。有人可以帮忙吗?

编辑:解决方案是:

require 'mysql'

begin
  connection = Mysql.new 'localhost', 'root', 'root', nil, 8889, '/Applications/MAMP/tmp/mysql/mysql.sock'
  connection.list_dbs.each do |db|
    puts db
  end

rescue Mysql::Error => e
  puts e.errno
  puts e.error

ensure
  connection.close if connection
end

【问题讨论】:

  • 只要找出mysql.sock的位置并在连接中添加socket参数即可。或者,检查 my.cnf 是否为 socket=... 并将其更改为 /tmp/mysql.sock
  • @YevgeniyAnfilofyev 究竟如何在 ruby​​ 中向连接添加套接字参数?
  • 我认为是这样的:connection = Mysql.new 'localhost', 'root', 'root', nil, 8889, '/tmp/mysql.sock'
  • @YevgeniyAnfilofyev 就像一个魅力!谢谢老大!

标签: mysql ruby


【解决方案1】:

根据mysqlgemhttp://www.rubydoc.info/gems/mysql/2.9.1/Mysql#new-class_method(不要乱用mysql2gem)参数建立与mysql服务器的连接往这个方向走:

host, user, passwd, db, port, sock, flag

所以需要在端口声明后添加mysql进程的socket路径。在你的情况下,它会是这样的:

Mysql.new 'localhost', 'root', 'root', nil, 8889, '/<path to sock file>/mysql.sock'

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2020-11-03
    • 2014-09-16
    • 2016-11-13
    • 2021-03-14
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多