Cygwin環境でDBD::mysql使うときは+αでホストのIPアドレスを指定すればおkでした
引き続き、Web+DB Pressのvol.32にあるCatalystの特集でただいま"いろは"を勉強中です。
前回記事 Template::Toolkitを使ってみたんだけど生成されたMyApp::View::TT.pmがちょっと変?
今回はこんな感じのことをしてみました
- myappのDBを作成
- テーブルの作成
- サンプルデータの挿入
- CDBIモデルの生成(参考:リスト1)
- myapp.ymlの初期設定(参考:リスト2)
- テンプレートの作成
リスト1
$ perl script/myapp_create.pl model CDBI CDBI dbi:mysql:myapp root
リスト2
Model::CDBI: dsn: 'dbi:mysql:dbname=myapp' password: 'test1234' user: 'root'
この内容は [を] WEB+DB PRESS Vol.32 の Catalyst 入門記事のメモ さんのところが参考になります。というか参考にさせて頂いております。
DBD::nysqlはソケットで接続しようとするのでCygwinだとエラーになります><
リスト3
$ perl script/myapp_create.pl mode CDBI CDBI dbi:mysql:myapp user_name password
上記(リスト3)を実行すると、下記(リスト4)のように返ってくる。これだとNG。
リスト4
exists "/home/tekiomo/MyApp/script/../lib/MyApp/Model" exists "/home/tekiomo/MyApp/script/../t" exists "/home/tekiomo/MyApp/script/../lib/MyApp/Model/CDBI.pm" DBI connect('myapp','root',...) failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) at /usr/lib/perl5/site_perl/5.8/Class/DBI/Loader/mysql.pm line 92 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) at /usr/lib/perl5/site_perl/5.8/Class/DBI/Loader.pm line 87
このときの/lib/MyApp/Model/CDBI.pmは以下(リスト5)の通り。
リスト5
package MyApp::Model::CDBI; use strict; use base 'Catalyst::Model::CDBI'; __PACKAGE__->config( dsn => 'dbi:mysql:myapp', user => 'user_name', password => 'password', options => {}, relationships => 1 );
修正対策(こうすればとりあえず動く)
Perl先生にお聞きしたところ、CygwinとWindows間ではソケットが使えないのが原因。強制的にHOSTのIPアドレスを指定して接続する必要がある。とのこと。
- /lib/MyApp/Model/CDBI.pm:リスト5の__PACKAGE__->config(...)をすべてコメント化
- myapp.ymlをリスト6のようにhostのIPアドレスを指定する形に修正
リスト6
Model::CDBI: dsn: 'dbi:mysql:host=127.0.0.1;dbname=myapp' password: 'test1234' user: 'root'
これで起動できました。ありがとうございました。
そもそも"/lib/MyApp/Model/CDBI.pm"は自動で生成されるものなのだから、生成する際にIPアドレスを指定できるのでは?
ということで、もうちょっとがんばってみました。
CDBIモデルの生成を下記(リスト7)のように実行
リスト7
$ perl script/myapp_create.pl model CDBI CDBI dbi:mysql:myapp:127.0.0.1 user_name password
エラーもなく/lib/MyApp/Model/CDBI.pmが生成され、内容は下記(リスト8)の通りです。
リスト8
package MyApp::Model::CDBI; use strict; use base 'Catalyst::Model::CDBI'; __PACKAGE__->config( dsn => 'dbi:mysql:myapp:127.0.0.1', user => 'user_name', password => 'password', options => {}, relationships => 1 );
"こいつ…動くぞ!!"
ということで、無事に起動できましたー(^ー^)
(感想)
ほえー疲れた…。