我在Mac上,並使用brew來安裝更新的MySQL。爲了簡化我的本地數據庫創建,我將密碼從我的本地root用戶(我知道,我知道)中刪除,創建新的Rails應用程序(rails new myapp -d mysql
)後,應該只能運行rake db:create
,對吧?耙db:創建繼續使用/tmp/mysql.sock儘管my.cnf設置
然而,儘管有/etc/my.cnf
集來定義標準的mysql.sock位置...
[mysqld]
socket=/usr/local/var/mysql/mysql.sock
[client]
socket=/usr/local/var/mysql/mysql.sock
... Rails的仍然不會使用新定義的mysql.sock
文件上rake db:create
:
rake db:create
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "reconnect"=>false, "database"=>"delayed_jobs_development", "pool"=>5, "username"=>"root", "password"=>nil, "host"=>"localhost"}, charset: , collation:
運行mysqladmin variables
列出了正確的套接字文件位置,與mysql --help
一樣。我重新啓動了MySQL服務器,甚至重新創建了Rails應用程序。
所以我的問題:還有什麼可以將套接字文件默認爲/tmp/mysql.sock
,或者是否有一個備用的,最好是全局的配置文件,我可以在其中指定rake任務將遵守的位置? Rake任務可以調用另一個使用不同配置文件的命令行MySQL工具嗎?
顯然,我可以創建一個從/tmp
位置到我的真實位置的符號鏈接,或者編輯我的database.yml
文件以引用它。我知道如何讓Rails正確地與數據庫服務器交談,但關鍵是要設置一次適當的默認值,所以我在本地創建的任何未來的Rails應用程序都可以在不進行額外編輯的情況下運行(/tmp/mysql.sock獲取在重新啓動時清除)。
事實上,我什至不知道爲什麼它試圖通過套接字文件在所有的連接,因爲我database.yml
文件,告訴它使用主機名:由於MySQL的文件說
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: myapp_development
pool: 5
username: root
password:
host: localhost
首先,感謝您對此做出的深入解答和研究。很高興看到你花時間捅了一圈。我嘗試了所有三個環境變量,並且MYSQL_UNIX_PORT完成了這個任務。這解決了我的proboem,並且我會建議app_generator.rb包含/usr/local/var/mysql/mysql.sock以便安裝brew。 – 2012-07-14 15:34:56