ponkiti's blog

主に自分用、イベント参加メモや備忘録として利用

Mac OS Xで #isucon2 環境(Perl)を再現してみる ※アプリケーションの起動まで

YAPC::Asia 2014やISUCON4予選の影響もあり、Mac上でISUCON2の課題を再現してみることにした。ISUCON3のファイル一式は公開されてない??

環境はMac OS X 10.9.5。

git cloneしようとしたがうまくいかなかったので、Download ZIPでDLし、ホームディレクトリ上にZIPを展開、isucon2とディレクトリ名を変更した。
git cloneは会社のPC&ネット環境で行って失敗したのだけど、自宅PCで試したらすんなりDLできた。

$ cd ~/isucon2

MySQLスキーマの設定をする。ローカルのMySQLにパスワードを設定している場合はmysql -u root -p-pオプションをつける。

$ mysql -u root < webapp/config/database/isucon2.sql

必要なモジュールをインストール。./cpanm./は誤字?

$ cd webapp/perl
$ cpanm -n -Lextlib --installdeps .

Perlでアプリケーションを起動させるところで、DBIのconnectエラーが発生。これは、MacにインストールしてあるMySQLのユーザ名とパスワードが、配布されたISUCON2の設定ファイルと異なっていたため。

$ perl -Mlib=extlib/lib/perl5 extlib/bin/plackup -s Starman -E production --preload-app app.psgi
2014/09/29-21:46:01 Starman::Server (type Net::Server::PreFork) starting! pid(48123)
Resolved [*]:5000 to [0.0.0.0]:5000, IPv4
Binding to TCP port 5000 on host 0.0.0.0 with IPv4
Setting gid to "20 20 20 401 12 61 79 80 81 98 33 100 204 398 399”

DBIx::Sunny connect('database=isucon2;host=127.0.0.1;port=3306','isucon2app',...) failed: Access denied for user 'isucon2app'@'localhost' (using password: YES) at /Users/user_name/isucon2/webapp/perl/lib/Isucon2.pm line 29.

エラーが発生したのはIsucon2.pmの29行目。

 24 sub dbh {
 25     my ($self) = @_;
 26     $self->{_dbh} ||= do {
 27         my $dbconf = $self->load_config->{database};
 28         DBIx::Sunny->connect(
 29             "dbi:mysql:database=${$dbconf}{dbname};host=${$dbconf}{host};port=${$dbconf}{port}", $dbconf->{username}, $dbconf->{password}, {
 30                 RaiseError => 1,
 31                 PrintError => 0,
 32                 ShowErrorStatement  => 1,
 33                 AutoInactiveDestroy => 1,
 34                 mysql_enable_utf8   => 1,
 35                 mysql_auto_reconnect => 1,
 36             },
 37         );
 38     };

common.local.jsonファイルのusernamepasswordを自分のMySQLの設定に書き換える。

$ vi /Users/a_aoyama/isucon2/webapp//config/common.local.json

http://localhost:5000/ にアクセスし、アプリケーション画面が表示されることが確認できた。

f:id:pyoonn:20140929235215p:plain

その他

会社のPCだと http://localhost:5000/ への接続に失敗する。

f:id:pyoonn:20140930151515p:plain