戯言

自社サービスを開発、運営している会社でスクラムマスターをやっている人の戯言です。

Amon2で遊びたい(実践編)

前回からの続き。amon2-setup.plからスタートです。
Amon2は6.00が入っています。
ググると過去バージョンと現在のバージョンとは動作が違うことが結構ありました。
今回は全面的に PerlのWAF,Amon2の使い方とサンプルアプリケーション - uzutaka's notes こちらの写経をしていく中での気付きを書いていきます。

amon2-setup.pl

前回、/usr/local/binに入れているので、コマンド的には

# amon2-setup.pl (プロジェクト名)

オプションにFlavorが選択出来るようですが、どんな差があるのか一旦置き。
とりあえずデフォ。

コマンドを叩くとプロジェクト名に指定した名前のディレクトリが作成されるので、以後はそちらにcdしてからの作業になる。

carton install

cpanfileが自動生成されているのでcarton installする。
前回plenvで環境を作っているので

plenv exec carton install

ということになる。
結構時間を要するのでしばし待つ。

hello world

ここまで来ると、一旦表示確認ができる。
サーバの起動コマンドは下記になる

plenv exec carton exec -- perl -Ilib script/(プロジェクト名)-server -host (awsのホスト名:5000)

plenvのcarton installを行ったので、perlコマンドを実行する時も明示的に指定する必要がある。
それと-hostで正しい名前を渡してあげないと表示確認ができなかった。
ここで数時間ハマり、amon2-setup.plを覗いてみてhost名が指定できることが判った。。。
localhostで動作させている分には困らない事なのだろうけど注意されたし。
ポート番号はデフォで5000番になるようだ。

mysql setup

いきなり感のあるDB setupだが、冒頭で紹介したblogの写経を進めていくとmysqlが必要になる。
AMIにはもちろん入っているはずも無いので、自前でsetupする必要がある。

$ sudo yum install mysql
$ sudo yum install mysql-server

my.cnf

とにかく動いてさえくれればいいのだけど、せっかくなので設定する。
とはいえデフォで用意されているものをコピーしてくるだけ。
デフォの設定ファイルは /usr/share/mysql/ に用意されている my-*.cnf だ。
メモリ使用量毎で選べるようになっている。
現在のインスタンスのメモリ量を見てみると・・

$ cat /proc/meminfo
MemTotal: 608292 kB
MemFree: 99044 kB
・・・以下略

600M詰んでいるがほぼ使ってしまっている状態なので64M以下で推奨される my-small.cnf を利用する

# sudo cp -ipu /etc/my.cnf /etc/my.cnf.bak # 念のためのバックアップ
# sudo cp /usr/share/mysql/my-small.cnf /etc/my.cnf

mysqld起動

起動コマンドを打ってみる

$ sudo service mysqld start

・・・。何故か起動しない。そしてエラーログにも何も出てこない?

まずはエラーの詳細を把握しないといけないのでmy.cnfに1行追加

log-error=/var/log/mysqld.log

すると、どうもmysql_install_dbがうまく動いていなかったらしい。
ということでコマンドを実行してみる

$ sudo mysql_install_db --datadir=/var/lib/mysql --user=mysql

そしてもう1度起動コマンド

$ sudo service mysqld start
Starting mysqld: [ OK ]

動いた!

DBD::mysql

Tengからmysqlに接続する部分でエラーが出る。
どうやらDBD::mysqlが無いようなので、cpanfileに

requires 'DBD::mysql';

と書いてplenv exec carton install するも、エラーで弾かれる。
エラーの内容はmysql.hを探しているが、無いよーというものだった。
これらはmysql-develを入れることで解決できた

$ sudo yum install mysql-devel

その他

写経元と現在ではTengも書き変わっているようで、DB.pm の $self->search の結果はTeng::Iteratorになっている。
いきなりget_columnすると怒られるので $itr->next()してあげる必要がある。
一応ソースはpushした
https://github.com/harakachi/Amon2tutorial

まとめ

これでイケてるPerl環境を作りつつ、DBと連携するWebページを作るための一通りの流れができたのではないかと思う。
問題はここから先、何を作ればいいのか、なのだけど。