私は 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
たファイルを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 が DB サーバーと正しく通信できるようにする方法は理解していますが、重要なのは、適切なデフォルトを一度設定することです。そのため、今後ローカルで作成する Rails アプリは、余分な編集を行わなくても問題ありません (/tmp/mysql.sock gets再起動時にクリアされます)。
実際、私のdatabase.yml
ファイルはホスト名を使用するように指示しているため、ソケットファイルを介して接続しようとしている理由がまったくわかりません。
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: myapp_development
pool: 5
username: root
password:
host: localhost