Apache-CGIでデプロイ

概要

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

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

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

アプリケーションルート以下にpublic/やlib/を置く。

フロントコントローラ

/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