我在 Mac 上使用 brew 安装更新的 MySQL。为了简化本地数据库的创建,我取消了本地 root 用户的密码(我知道,我知道),并且在创建一个新的 Rails 应用程序(rails new myapp -d mysql
)之后,应该可以运行了rake db:create
,对吧?
然而,尽管已经/etc/my.cnf
设置为定义标准 mysql.sock 位置......
[mysqld]
socket=/usr/local/var/mysql/mysql.sock
[client]
socket=/usr/local/var/mysql/mysql.sock
... Rails 仍然不会mysql.sock
在 a 上使用新定义的文件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:
Runningmysqladmin variables
列出了正确的套接字文件位置,mysql --help
. 我重新启动了 MySQL 服务器,甚至重新创建了 Rails 应用程序。
所以我的问题是:还有什么可以将套接字文件默认为/tmp/mysql.sock
,或者是否有一个替代的,最好是全局的配置文件,我可以在其中指定 rake 任务将遵循的位置?rake 任务是否可以调用使用不同配置文件的不同命令行 MySQL 工具?
显然,我可以创建一个从该/tmp
位置到我的真实位置的符号链接,或者编辑我的database.yml
文件以引用它。我了解如何让 Rails 正确地与数据库服务器对话,但关键是设置一次正确的默认值,因此我在本地创建的任何未来 Rails 应用程序都可以在没有额外编辑的情况下使用(/tmp/mysql.sock 获取重新启动时清除)。
事实上,我什至不确定它为什么要尝试通过套接字文件进行连接,因为我的database.yml
文件告诉它使用主机名:
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: myapp_development
pool: 5
username: root
password:
host: localhost