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)
ついでに、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)
上記のように権限を設定してみる。
[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)
[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';
※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のヘッダー?
[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 に必要とされています
はぁ・・・。依存性の欠如?
わけわからんので、違う方法を検討する。
最初に戻ろう。
現状把握。
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