* 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>

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS