【问题标题】:Ruby-mysql troubles - Getting error while trying to use mysql module for RubyRuby-mysql 问题 - 尝试为 Ruby 使用 mysql 模块时出错
【发布时间】:2017-09-22 03:12:24
【问题描述】:

我正在使用 Ruby v2.0 并且我正在使用来自这里的 Ruby-mysql v2.9.14 连接器:https://rubygems.org/gems/ruby-mysql

我在运行此代码时遇到了一些错误:

require 'mysql'

begin
  connection = Mysql.new 'localhost', 'root', 'root'
  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

错误:

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:in `new'
from /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:in `timeout'
from /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:in `new'
from /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:in `new'
from /Users/Joakim/Google Drive/Skole/IT/Ruby/Modul 6/ruby-mysql.rb:4:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'

我的老师告诉我是“司机”撞车了,但我不确定 - 对此我能做些什么吗?

【问题讨论】:

  • 您确定在您的主机上有一个 R/W /tmp 文件夹吗?

标签: mysql ruby-on-rails ruby


【解决方案1】:

驱动程序尝试通过套接字文件/tmp/mysql.sock 进行连接,该文件在您的系统中不可用(您可以检查该文件)。驱动程序假定您想通过套接字文件进行连接,因为您指定了localhost

这是什么驱动does

@host_info = (host.nil? || host == "localhost") ? 'Localhost via UNIX socket' : "#{host} via TCP/IP"

尝试将localhost 更改为127.0.0.1

已编辑

好像你用的是mysql的自定义端口,8889,所以连接数据库的时候需要指定:

connection = Mysql.new 'localhost', 'root', 'root', nil, 8889

这是method definition 的sn-p:

  # Connect to mysqld.
  # @param [String / nil] host hostname mysqld running
  # @param [String / nil] user username to connect to mysqld
  # @param [String / nil] passwd password to connect to mysqld
  # @param [String / nil] db initial database name
  # @param [Integer / nil] port port number (used if host is not 'localhost' or nil)
  # @param [String / nil] socket socket file name (used if host is 'localhost' or nil)
  # @param [Integer / nil] flag connection flag. Mysql::CLIENT_* ORed
  # @return self
  def connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, socket=nil, flag=0)

【讨论】:

  • 好的,现在我收到以下错误:/Library/Ruby/Gems/2.0.0/gems/ruby-mysql- 2.9.14/lib/mysql/protocol.rb:153:in 'initialize': Connection refused - connect(2) (Errno::ECONNREFUSED)
  • @JoakimK.S.S.你可以使用mysql客户端连接到127.0.0.1:3306吗?
  • in 'initialize': getaddrinfo: nodename nor servname provided, or not known (SocketError) 我之前尝试过使用127.0.0.1:8889 并得到了同样的错误。我正在尝试连接到我的 macbook 上由 MAMP 运行的 mysql 服务器。
  • @JoakimK.S.S.尝试设置端口参数,例如connection = Mysql.new 'localhost', 'root', 'root', nil, 8889
  • 太棒了。我已经更新了答案。您应该更新您的问题以提及您使用的自定义端口。
猜你喜欢
  • 2023-01-19
  • 2012-11-14
  • 1970-01-01
  • 2010-11-14
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多