ハマったのでメモ・・・・。
cpanm が必要なので、cpanm をインストールしておく必要がある。
インストールし終わったらamonをインストールする。
# cpanm Amon2
プロジェクト内のモジュールの依存関係を解決する carton もインストールする。
# cpanm Carton
カレントディレクトリにプロジェクトを作成する。
*amon2 には実装テンプレがいくつかあり、フレーバーと呼ばれている。
以下のコマンドだと、Large という大規模向けのプロジェクトが作られる。
Lite, Basic というフレーバーもあるが、Large がCakePHP, FuelPHPのような感じになるので、Large がいいと思う。
# amon2-setup.pl --flavor=Large MyProject
プロジェクト内で必要なモジュールをインストールする。
# cd MyProject # carton install
さらに依存している モジュールをインストールする。
SQLite or mysql は利用する方だけでいい。
# cpanm Plack::Middleware::ReverseProxy DBD::SQLite # cpanm DBD::SQLite # cpanm DBD::mysql
Plack::Middleware::ReverseProxyは
このモジュールはアクセス元がプロキシサーバを介してアプリケーションサーバにアクセスする場合にも、
アプリケーションサーバでアクセス元のIPアドレスを参照することが出来る仕組みを提供してくれる。
この追加でインストールするところでハマった。
carton install で依存するモジュール全部インストールしておいて欲しい・・・。
設定ファイル MyProject/script/myproject-server でホストを設定する。
この myproject-server というスクリプト名はプロジェクト名によって変わる。
my $host = '192.168.33.12'; //$hostを任意のIPに修正する。初期だと 127.0.0.1 になっているが、VM用に 192.168.33.12 に変更した。
起動はそれ用のスクリプトをcartonで起動する。
*ちなみに、以前はルートディレクトリ直下に app.psgi というのがあって、それを利用したらしい。
# carton exec -- plackup -Ilib -R ./lib -p 5000 --access-log=/dev/null -a ./script/xxxx-server
あとは myproject-server で指定したIPにアクセスするだけだが、エラーが出ると思う。
これはDB設定をしていないのが原因だった。
amon2にはデモとしてsessionを利用したアクセス数表示機能が実装されている。
lib/Gacha/Web/C/Root.pm を見ると分かると思う。
そして、amon2ではこのsessionがDBで管理されている。
myproject-server を見ると、以下のようにsessionがDBで管理されているのを確認できる。
enable 'Plack::Middleware::Session', store => Plack::Session::Store::DBI->new( #←DBIになってる。 get_dbh => sub { state $db_config = Gacha->config->{DBI} || die "Missing configuration for DBI"; DBI->connect( @$db_config ) #←接続しにいってる。 or die $DBI::errstr; } );
なので、DB接続できないとamon2のデモページにアクセスできない。
sessionなんだからファイルにしてくれればいーのに・・・。
ということで、DBの設定をする。
amon2はmysqlとsqliteをサポートしていて、それぞれ設定方法が違う。
【sqlite】
デフォルトではsqliteになっているので、sqliteを利用する場合は
以下のように用意されているサンプルデータをインポートすれば正常にアクセスできるようになる。
# sqlite3 db/development.db < sql/sqlite.sql
sql/sqlite.sql に session というテーブルが確認できる。
このテーブルにsession情報が入るのだろう。
【mysql】
mysqlの場合は config/development.pl を修正する。
これはDBの接続情報が載っているファイル。
初期だとsqlite用のファイルになっているはず。
それをmysqlに変更する。
use File::Spec; use File::Basename qw(dirname); my $basedir = File::Spec->rel2abs(File::Spec->catdir(dirname(__FILE__), '..')); my $dbpath = File::Spec->catfile($basedir, 'db', 'development.db'); +{ 'DBI' => [ "dbi:mysql:db1", 'root', 'pass', # ←db名、ユーザ名、パスワードを設定 +{ } ], };
あとは sql/mysql.sql をmysqlにインポートすればアクセスできるようになる。
当然、DBによるsession管理にもハマった・・・。
以上でサンプルにアクセスできるはず。