2007年10月4日木曜日

No such file or directory - /tmp/mysql.sockについて

ちょっと視点を変えて下記を試してみましたが

・/var/run/mysqld/mysqld.sock のリンクを作成して mysql.sock とリンク名を変更
・RoRで作りかけアプリの中 /scheduler/tmp に放りこんでみる
・/scheduler/config/database.ymlに昨日追加した
「socket: /var/run/mysqld/mysqld.sock」の一文を削除
・$ rake db:migrate を実行してみる。

→ やっぱりダメ!

database.ymlをもう一度見てみる。
コメントには「MySQLのバージョンは4.0と5.0がお勧め」って書いてある。
バージョンは 5.0.38 だから問題なさそう。

database.ymlの socket: 指示を消すと rake はどこから
「/tmp/mysql.sock」だと命令されているのか?


ググってみると
☆ MySQLのソケットの位置はどうやって指定する?

> 1. 引数
> 2. 環境変数 MYSQL_UNIX_PORT
> 3. デフォルト値 /tmp/mysql.sock
> の順でソケットの位置を見ていることがわかった。

だから、やっぱり、scheduler/config/database.ymlに
「socket: /var/run/mysqld/mysqld.sock」って追加すればいいのでは??
ううう。

自分的 FAQ (よくある質問とその回答)
今までやっていたことと同じような感じですが、

>4.WEBrick を再起動

これが気になります。

□WEBrick 起動コマンド
$ ruby ./script/server

http://localhost:3000/確認。
問題なく立ち上がってます。

もう一度



$ rake db:migrate
(in /home/b-tech01/scheduler)
rake aborted!
#42000 Access denied for user 'rails'@'localhost' to database 'scheduler_development'




あー やっとエラーの内容が変わりました!
たぶん、socketは通った(?)
次はMySQLのエラーが〜

MySQLの「#42000Access denied for user ''@'localhost' to database 'sample'」というエラー


>「grant」文で、作ったデータベースで、ユーザー「recipe3」に
>アクセス権減を与える訳ですが、僕はここの「recipe3@localhost;」という
>箇所をチュートリアルのままやっていたので「recipe@localhost;」としたままでした。
との一文・・・で、どう解決されたのだろう・・・

私もチュートリアルの言うままdatabase.ymlを

adapter: mysql
database: scheduler_development
username: rails
password:
host: localhost
encoding: utf8
socket: /var/run/mysqld/mysqld.sock

としたのですが、「'rails'@'localhost'」でエラーが出ているということは
アクセス権の問題?まだテーブル作ってませんが・・・

RubyOnRails を使ってみる 【第 2 回】 (続・RubyOnRails を使ってみる)
データベースの設定

↑ここに答えがありました!!!!

rails@localhost がscheduler_developmentとscheduler_testを
扱えるように下記Queryを実行



mysql> grant all on scheduler_development.* to rails@localhost;
Query OK, 0 rows affected (0.04 sec)

mysql> grant all on scheduler_test.* to rails@localhost;
Query OK, 0 rows affected (0.00 sec)


WEBrickをおまじないのように再起動


$ rake db:migrate
(in /home/b-tech01/scheduler)
== CreateSchedulers: migrating ================================================
-- create_table(:schedules)
-> 0.0647s
== CreateSchedulers: migrated (0.0651s) =======================================



mysql> show tables;
+---------------------------------+
| Tables_in_scheduler_development |
+---------------------------------+
| schedules |
| schema_info |
+---------------------------------+
2 rows in set (0.00 sec)



できたーーーーーーーーー!!

高級?なMySQLではちゃんとデータベースごとにユーザ設定をしてあげなければ
ならないということでした。
はぁ〜〜長かった・・・

0 件のコメント: