ApacheにCGIでデプロイ

概要

Mojoliciousで作成したアプリケーションをApacheにCGIとして動くようにデプロイする。Apacheのドキュメントルートにディレクトリを作り、そのディレクトリ以下で動作するようにする。

想定するURL・ファイルパス

アプリケーションルートのURL
http://example.com/my_app/
アプリケーションルートのファイルパス
/var/www/my_app/
Apacheのドキュメントルート
/var/www/htdocs/

アプリケーションのpublicをApacheのドキュメントルート以下にシムリンクを張る

ln -s /var/www/my_app/public /var/www/htdocs/my_app

フロントコントローラ

/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でフロントコントローラにリクエストを集める

RewriteEngine On
RewriteBase /my_app

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.cgi [QSA,L]

アプリケーションクラスでのルーティング設定

$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'); #(注)

テンプレートでURLを指定

<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

Last-modified: 2010-02-24 (水) 21:05:25 (3519d)