2010-11-16 72 views
6

我想連接到遠程MySQL主機(使用rake db:create),但Rails始終認爲它是本地的。 database.yml中它採用以下配置:使用Rails連接遠程MySQL主機的問題

defaults: &defaults 
    encoding: unicode 
    adapter: mysql 
    username: <username> 
    password: ************* 
    port: 3306 
    host: <remote ip address> 

development: 
    <<: *defaults 
    database: <db name> 
test: &test 
    <<: *defaults 
    database: <db name> 
production: 
    <<: *defaults 
    database: <db name> 

和數據庫上嘗試任何時候總是出現此錯誤:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

的配置工作,只要我使用本地數據庫(即不主機/端口部分)。 連接到遠程MySQL服務器可以很好地處理給定的細節。

有什麼問題出錯了嗎?

編輯: 的問題僅發生rake:db:create,其他任務 - 錯誤信息是實在太差了誤導。

+0

可以粘貼完整的database.yml嗎?以及你使用哪個環境?我想你可以在某處定義一個套接字配置。 – shingara 2010-11-16 14:50:10

+0

(請參閱編輯,似乎是一個奇怪的錯誤消息) – 2010-11-16 14:58:07

+0

檢查您的防火牆/路由器設置,它似乎沒有TCP連接或端口被阻止。 – 2010-11-16 15:28:32

回答

1

您可能需要啓用MySQL服務器來接受遠程請求(通過綁定到主機的IP地址或所有地址格式0.0.0.0)。編輯遠程主機上的MySQL配置文件my.cnf。在Ubuntu中,你可以找到在文件中/etc/mysql/my.cnf

更改綁定地址的值:

bind-address   = 0.0.0.0 
+0

或只是註釋掉bind-address。 – mahemoff 2012-01-20 13:44:03

+0

你必須寫這個。註釋掉將不起作用,因爲這將考慮只接受來自當前主機的連接。 – Yeameen 2012-03-02 17:18:02

0

我發現同樣的事情。我用的是這樣的:

RAILS_ENV=production bundle exec rails console 

,它是抱怨不能夠找到/tmp/mysql.sock(這是隻有在database.yml發展部分)。如果我從控制檯檢查了Rails.env,它正確地表示生產。修復如下簡單:

RACK_ENV=production bundle exec rails console