2017-05-02 60 views
0

我想使用紅寶石作爲前端工具來訪問我的SQL數據庫,但是我遇到了一些錯誤。首先,我使用MAMP作爲在我的計算機上設置本地SQL服務器的工具,並且使用MYSQL工作臺訪問MAMP時沒有問題,並且我已經建立了幾個數據庫。然而,當我試圖使用此代碼通過Ruby來訪問數據庫:使用紅寶石MAMP作爲本地服務器訪問SQL語句

Vetles-的MacBook-PRO:

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 

我在終端得到這個錯誤紅寶石Vetle $紅寶石sql.rb /Library/Ruby/Gems/2.0.0/gems/ruby​​-mysql-2.9.14/lib/mysql/protocol.rb:150:在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:in新的' from /Library/Ruby/Gems/2.0.0/gems/ruby -mysql-2.9.14/lib/mysql/protocol.rb:150: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:來自/Library/Ruby/Gems/2.0.0/gems/r的initialize' from /Library/Ruby/Gems/2.0.0/gems/ruby-mysql-2.9.14/lib/mysql.rb:115:in新「 」 uby-mysql-2.9.14/lib/mysql.rb:115:在connect' from /Library/Ruby/Gems/2.0.0/gems/ruby-mysql-2.9.14/lib/mysql.rb:50:in新' from 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 
+0

只需找出位於'mysql.sock'的位置並添加套接字參數連接。或者,檢查'my.cnf'是否爲'socket = ...',並將其更改爲'/ tmp/mysql.sock' –

+0

@YevgeniyAnfilofyev如何在ruby中爲連接添加套接字參數? –

+0

我認爲是這樣的:'connection = Mysql.new'localhost','root','root',nil,8889,'/ tmp/mysql.sock'' –

回答

0

基於mysql寶石http://www.rubydoc.info/gems/mysql/2.9.1/Mysql#new-class_method的文件(做mysql2寶石不要亂)參數建立在這個方向連接到MySQL服務器去:

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

所以你需要在端口聲明後添加一個到mysql進程套接字的路徑。並在你的情況下,它會是這樣的:

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