rails を mongrel で動かす 2

前回の続き。

17.課題点の解決
――――――――――――――――――――――――――――――――――――――――
1.config/database.yml で利用している mysql のユーザーが root である。しかもパスワードなし。(ユーザー作って解決?)
2.development で動いている、production で動かさないとな。


昨日、上記2点の問題点があった。
解決しよう!おう!


18.config/database.yml で利用している mysql のユーザーが root である。しかもパスワードなし。
――――――――――――――――――――――――――――――――――――――――
これは、解決しないと・・・。
と言うか、そもそも、rootにパスワードがないのは、どうなんだ!
と言うことで、まずrootのパスワード保護からやろう。


とりあえず、mongrelを起動して現状をチェック。


SSHを利用してrootでログイン。
[root@localhost ~]# cd /srv/www/lighttpd/lr_portal/
[root@localhost lr_portal]# mongrel_rails start

Starting Mongrel listening at 0.0.0.0:3000

Starting Rails with development environment...

Rails loaded.

Loading any Rails specific GemPlugins

Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).

Rails signals registered. HUP => reload (without restart). It might not work well.

Mongrel available at 0.0.0.0:3000

Use CTRL-C to stop.


これで、http://10.20.138.111:3000/ にアクセスしてみる。

うむ。ちゃんと動いている。

では、mysqlのrootユーザーにパスワードをつけよう。

mysql root パスワード」でググって見る。

http://www.rfs.jp/server/mysql/02/01.html
↑ここに書いてあった。

[root@localhost ~]# mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 47 to server version: 5.0.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SET PASSWORD FOR root=PASSWORD('********');
ERROR 1133 (42000): Can't find any matching row in the user table
mysql>

注意:******** ←ここは、ちゃんと入力してますからね。

ぐはー。なんかエラーでた。
ERROR 1133 (42000): Can't find any matching row in the user table
なんか、user table がないみたい?


「ERROR 1133 (42000): Can't find any matching row in the user table」でググって見る。

http://kajuhome.com/cgi-bin/patio/patio.cgi?mode=view&no=273
↑このページ。ようするに、利用するDBを選択してないからだと書いてある。

やってみる。

mysql> use mysql;
Database changed
mysql> SET PASSWORD FOR root=PASSWORD('********');
ERROR 1133 (42000): Can't find any matching row in the user table
mysql>

注意:******** ←ここは、ちゃんと入力してますからね。

ぐはあぁぁー。だめぢゃん。

あ、同じページに

>パスワードの設定は、ユーザの後にホスト名を追加しなければならないようです。
>以下の様に、「ユーザ@ホスト」の様に指定してください。
mysql> SET PASSWORD FOR root@localhost=PASSWORD('abcde');

なるほど。やってみよう。


mysql> use mysql;
Database changed
mysql> SET PASSWORD FOR root@localhost=PASSWORD('*******');
Query OK, 0 rows affected (0.00 sec)

注意:******** ←ここは、ちゃんと入力してますからね。


やった!成功!!!


これで、http://10.20.138.111:3000/ にアクセスして、
色々いじってみる。エラーが出るはず。

あれ?
めちゃめちゃ登録できるし・・・。

mongrelを再起動してみる。

[root@localhost lr_portal]# mongrel_rails stop
[root@localhost lr_portal]# mongrel_rails start

Starting Mongrel listening at 0.0.0.0:3000

Starting Rails with development environment...

Rails loaded.

Loading any Rails specific GemPlugins

Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).

Rails signals registered. HUP => reload (without restart). It might not work well.

Mongrel available at 0.0.0.0:3000

Use CTRL-C to stop.


これで、http://10.20.138.111:3000/ にアクセスしてみる。

ビンゴ!

#28000Access denied for user 'root'@'localhost' (using password: NO)

パスワードがないって言うエラーが出た。

では、rails側でパスワードを設定してみる。

config/database.yml に設定したパスワードを設定して、アップロード。

あれ?同じ画面だ・・・。
mongrelを再起動してみる。


Mysql::Error: Lost connection to MySQL server during query: SHOW FIELDS FROM company_directories

ぬおおおぉ。
なんか、違うエラーが出た!!!

なんか、コネクションエラーっぽ・・・。
このエラー昨日もでなかったけ・・・?

このエラーはrailsからmysqlに接続するさいの認証のエラーだったはず・・・。
あ、

grant all privileges on *.* to fukushige@localhost identified by 'fuku' with grant option;

↑これやんなきゃだめなのか?
やってみよう。

[root@localhost lr_portal]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 58 to server version: 5.0.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> grant all privileges on *.* to root@localhost identified by '*********' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql>

ついでに、mongrel再起動。

[root@localhost lr_portal]# mongrel_rails stop
[root@localhost lr_portal]# mongrel_rails start

これで、アクセスしてみる。

Mysql::Error: Lost connection to MySQL server during query: SHOW FIELDS FROM company_directories

むあぁ。おなじだ!!!

mysql を再起動してみよう。
その後、mongrelも再起動。


[root@localhost lr_portal]# /etc/init.d/mysqld restart
MySQL を停止中: [ OK ]
MySQL を起動中: [ OK ]
[root@localhost lr_portal]# mongrel_rails start

Starting Mongrel listening at 0.0.0.0:3000

Starting Rails with development environment...

Rails loaded.

Loading any Rails specific GemPlugins

Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).

Rails signals registered. HUP => reload (without restart). It might not work well.

Mongrel available at 0.0.0.0:3000

Use CTRL-C to stop.

で、アクセスしてみる。

Mysql::Error: Lost connection to MySQL server during query: SHOW FIELDS FROM company_directories

ぐはー。変わらん・・・。
DBへのアクセスエラーだな・・・。

もちつけ、もちつくんだ・・・。


[root@localhost lr_portal]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16 to server version: 5.0.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> grant all privileges on lr_portal_production.* to root@localhost identified by '**********' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on lr_portal_test.* to root@localhost identified by '**********' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on lr_portal_development.* to root@localhost identified by '**********' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql>


上記のように権限を設定してみる。

mysql再起動。
mongrel再起動。

[root@localhost lr_portal]# /etc/init.d/mysqld restart
MySQL を停止中: [ OK ]
MySQL を起動中: [ OK ]
[root@localhost lr_portal]# mongrel_rails start

Starting Mongrel listening at 0.0.0.0:3000

Starting Rails with development environment...

Rails loaded.

Loading any Rails specific GemPlugins

Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).

Rails signals registered. HUP => reload (without restart). It might not work well.

Mongrel available at 0.0.0.0:3000

Use CTRL-C to stop.


で、アクセスしてみる。

Mysql::Error: Lost connection to MySQL server during query:


むむーん。変わらん・・・。何なの??


rootだからダメなのかな?

他のユーザを設定してみてやってみるか。

昨日
grant all privileges on lr_portal_production.* to fukushige@localhost identified by '****' with grant option;
grant all privileges on lr_portal_development.* to fukushige@localhost identified by '****' with grant option;
grant all privileges on lr_portal_test.* to fukushige@localhost identified by '****' with grant option;

とやっていたので、

database.yml の内容を

username: fukushige
password: fuku

にしてみる。

アップ、mysql,mongrel 再起動。
で、見てみる。

Mysql::Error: Lost connection to MySQL server during query:

ぐはぁぁあぁー!変わらん。
関係ないか・・・?

もっと、基本に返ろう。
railsの入門書を見てみよう。

config/database.yml で文字コードを指定していなかったので、指定してみる。

encoding: utf8

ついでに、config/environment.rb の一番上に $KCODE = "UTF8" を加えてみる。

次に、本に、rails と言うユーザーを作成しますと書いてあるが・・・これは必須??
とりあえず、作ってみる。

mysql> grant usage on *.* to rails@localhost identified by 'rails_rails';
Query OK, 0 rows affected (0.00 sec)

[root@localhost lr_portal]# /etc/init.d/mysqld restart
MySQL を停止中: [ OK ]
MySQL を起動中: [ OK ]
[root@localhost lr_portal]# mongrel_rails start


む、なんかエラーが変わった。

Mysql::Error: Lost connection to MySQL server during query: SET NAMES 'utf8'


「SET NAMES 'utf8'」でググって見る。

http://phpspot.net/php/pgMySQL4.1%8CnUTF-8%82%CC%8F%EA%8D%87.html
↑に

>MySQL4.1系ではデフォルトでUTF-8文字列が使われます。
PHPから普通にデータ挿入をしようとすると、文字化けします。
>SQL文を発行するまえに、クライアントの文字コード設定をしましょう。
文字コードの設定は次の構文で行います。

>UTF8に設定するには次のSQL文を実行します。
mysql> SET NAMES utf8;


とりあえず、やってみるか。


mysql> SET NAMES utf8;
Query OK, 0 rows affected (0.00 sec)

で、mysql,mongrel再起動。


[root@localhost lr_portal]# /etc/init.d/mysqld restart
MySQL を停止中: [ OK ]
MySQL を起動中: [ OK ]
[root@localhost lr_portal]# mongrel_rails start

で、見てみる。

Mysql::Error: Lost connection to MySQL server during query: SET NAMES 'utf8'

変わらん・・。なんだろう・・・。

もう一度、
Mysql Error Lost connection to MySQL server during query: SET NAMES utf8」でググって見る。

http://itpro.nikkeibp.co.jp/article/COLUMN/20060424/236113/?ST=lin-server&P=3
↑このページだと、
GRANT ALL PRIVILEGES ON addressbook.* TO ab@localhost IDENTIFIED BY 'ab';
やってるので、応用でやってみる。

GRANT ALL PRIVILEGES ON lr_portal_development.* TO rails@localhost IDENTIFIED BY 'rails_rails';
GRANT ALL PRIVILEGES ON lr_portal_test.* TO rails@localhost IDENTIFIED BY 'rails_rails';
GRANT ALL PRIVILEGES ON lr_portal_production.* TO rails@localhost IDENTIFIED BY 'rails_rails';

で、mysql,mongrel再起動。

※config/database.yml は
adapter: mysql
database: lr_portal_development
username: rails
password: rails_rails
encoding: utf8
host: localhost
socket: /var/lib/mysql/mysql.sock
↑な感じです。

[root@localhost lr_portal]# /etc/init.d/mysqld restart
MySQL を停止中: [ OK ]
MySQL を起動中: [ OK ]
[root@localhost lr_portal]# mongrel_rails start

Starting Mongrel listening at 0.0.0.0:3000

Starting Rails with development environment...

Rails loaded.

Loading any Rails specific GemPlugins

Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).

Rails signals registered. HUP => reload (without restart). It might not work well.

Mongrel available at 0.0.0.0:3000

Use CTRL-C to stop.

で、見てみる。

Mysql::Error: Lost connection to MySQL server during query: SET NAMES 'utf8'

変わらん・・・。むごー。

http://blogs.dion.ne.jp/koko/archives/4345309.html#more
mysqlの設定ファイルを発見。

/etc/my.cnf


http://d.hatena.ne.jp/shingotada/searchdiary?word=*[linux]
↑のページに、
rubyのヘッダーをインストールしていない
と書いてある・・・。
rubyのヘッダー?

yum install ruby-devel

[root@localhost lr_portal]# yum install ruby-devel
Loading "installonlyn" plugin
Loading "fastestmirror" plugin
Loading "priorities" plugin
Setting up Install Process
Setting up repositories
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
0 packages excluded due to repository priority protections
Parsing package install arguments
Nothing to do

うまくいかない・・・。パッケージがない??


ruby-devel Nothing to do」でググって見る。

・・・よくわからん・・・。

http://l5web.laser5.co.jp/rpm2html/7.2exp/ruby-devel-1.6.4-2.i386.html
↑このページにrpmがあったので、ダウンロード、インストールしてみる。

[root@localhost opt]# rpm -i ruby-devel-1.6.4-2.i386.rpm
エラー: 依存性の欠如:
ruby = 1.6.4-2 は ruby-devel-1.6.4-2.i386 に必要とされています

はぁ・・・。依存性の欠如?

わけわからんので、違う方法を検討する。
最初に戻ろう。


現状把握。


[root@localhost lr_portal]# mongrel_rails start

Starting Mongrel listening at 0.0.0.0:3000

Starting Rails with development environment...

Rails loaded.

Loading any Rails specific GemPlugins

Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).

Rails signals registered. HUP => reload (without restart). It might not work well.

Mongrel available at 0.0.0.0:3000

Use CTRL-C to stop.

mongrelスタートさせて、http://10.20.138.111:3000/ を見ると。

Mysql::Error: Lost connection to MySQL server during query: SET NAMES 'utf8'

こうなる。
エラーメッセージは、接続がおかしいと言っている。
SET NAMES 'utf8' がなぞだ。
文字コードはutf8でDBもrailsも作っているのに・・・。
config/database.yml も config/environment.rb もutf8の設定にしてある。
うーん。


おもむろに、
「SET NAMES utf8 mysql rails
とググって見る。


http://wota.jp/ac/?date=20061011
↑このページを見つける。


mysql> status