【发布时间】: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 就像一个魅力!谢谢老大!