* Apache-CGIでデプロイ [#if95ecac]
* ApacheにCGIでデプロイ [#if95ecac]
** 概要 [#tcea93b0]
Mojoliciousで作成したアプリケーションをApacheにCGIとして動くようにデプロイする。Apacheのドキュメントルートにディレクトリを作り、そのディレクトリ以下で動作するようにする。
** 想定するURL・ファイルパス [#n74d44a4]
:アプリケーションルートのURL|
http://example.com/my_app/
:アプリケーションルートのファイルパス|
/var/www/my_app/
:Apacheのドキュメントルート|
/var/www/htdocs/
** アプリケーションのpublicをApacheのドキュメントルート以下にシムリンクを張る [#if1dd669]
ln -s /var/www/my_app/public /var/www/htdocs/my_app
** フロントコントローラ [#ba59da8d]
/var/www/my_app/public/index.cgiに設置する。
#!/usr/bin/perl
use strict;
use warnings;
use lib qw(
/var/www/my_app/lib
);
use Mojo::Server::CGI;
$ENV{MOJO_APP} = 'MyApp';
$ENV{SCRIPT_NAME} = '';
Mojo::Server::CGI->new->run;
- Mojoのルーティングを調整するために、$ENV{SCRIPT_NAME}(=/my_app/index.cgi)を空にしている。
- もっといい方法があるのかも?
** mod_rewriteでフロントコントローラにリクエストを集める [#fe95be9b]
RewriteEngine On
RewriteBase /my_app
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.cgi [QSA,L]
** アプリケーションクラスでのルーティング設定 [#j05fbe47]
$r->route('/my_app/login/index')->to(controller => 'login', action => 'index')->name('login/index');
$r->route('/my_app/:controller/:action/:id')->to(controller => 'example', action => 'welcome', id => 1);
$r->route('(*path)')->name('static'); #(注)
*** 注 [#d2916f69]
- 画像などpublic/以下に置くファイルのため。
- http://d.hatena.ne.jp/perlcodesample/20091102/1246274997
** テンプレートでURLを指定 [#t7f65832]
<img src="<%= $self->url_for('static', path => '/my_app/img/foo.jpg');%>">
<a href="<%= $self->url_for('login/index');%>">/my_app/login/index</a><br>