- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Perl-Mojolicious/ApacheにFastCGIでデプロイ へ行く。
- 1 (2010-02-24 (水) 11:55:04)
- 2 (2010-02-24 (水) 12:09:06)
ApacheにFastCGIでデプロイ
前提
- FastCGIの実装としてmod_fcgidを利用する。
- その他の前提は、ApacheにCGIでデプロイと同様。
Apacheの設定
<IfModule !mod_fcgid.c> LoadModule fcgid_module modules/mod_fcgid.so </IfModule> SocketPath /tmp/fcgid_socket <Directory /var/www/my_app/public> Options All AllowOverride All </Director>
フロントコントローラ
/var/www/my_app/public/index.fcgiに設置する。
#!/usr/bin/perl use strict; use warnings; use lib qw( /var/www/my_app/lib ); use Mojo::Server::FastCGI; use Data::Dumper; $ENV{MOJO_APP} = 'MyApp'; $ENV{BASE_URL} = '/myapp/'; Mojo::Server::FastCGI->new->run;
- $ENV{BASE_URL}は本ウェブアプリ独自で使用する。
mod_rewriteでフロントコントローラにリクエストを集める
/var/www/my_app/public/.htaccessに設置する。
AddHandler fcgid-script .fcgi RewriteEngine On RewriteBase /myapp RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.fcgi [QSA,L]
アプリケーションクラスでのルーティング設定
__PACKAGE__->attr( base_url => $ENV{BASE_URL} ); sub startup { my $self = shift; my $base = $self->base_url; my $r = $self->routes; $r->route("${base}index")->to(controller => 'top', action => 'index')->name('top'); # (注) $self->renderer->add_helper( url_for => sub { my $script_path = $self->base_url . $0; $script_path =~ s/\./\\./g; ( my $url = shift->url_for(@_) ) =~ s#$script_path##; return $url; } ); }
注
- このままだとurl_for()が"/my_app/index.fcgi/my_app/index"のようなURLを返すので、不要な"/my_app/index.fcgi"部分を削除している。
- 同様の処理はMojolicious::Controllerクラスでも行う必要がある。