砂風呂

いろいろなことを書く

Mojoliciousのunderがうごかない?

クライアントでネイティブに動くゲームと、そのゲームのスコアを集計してランキングを表示する簡単なwebサービスを作ってみたいな〜という思いが湧いてきてしまって最近、Mojolicious::Liteをかじってみている。
Perlではおなじみの木本さんのサンプルコード
(http://d.hatena.ne.jp/perlcodesample/20140412/1396426029)
を直接使って動かしてみたのだが、ユーザー名をadminにしてもなぜかForbiddenのページが現れてくれない。なぜだろう。環境が合ってないからなのかな。分からないのでここに書き留めておく。

確かにadmin.
f:id:seaview_p35:20160422153113p:plain
ファッ・・・!?
f:id:seaview_p35:20160422153202p:plain

以下は引用です。

use Mojolicious::Lite;

# 前処理
under sub {
  my $self = shift;
  
  # ユーザーがadminの場合は許可しない
  my $user = $self->url_for->path->parts->[0] // '';
  if ($user eq 'admin') {
    
    $self->res->code(403);
    $self->render(text => 'Forbidden');
    return
  }
  
  return 1;
};

# /ユーザー名/プロジェクト名/ディレクトリ名
# あるいは /ユーザー名/プロジェクト名
get '/:user/:project/*dir' => {dir => undef} => sub {
  my $self = shift;
  
  # パラメーター
  my $user = $self->param('user');
  my $project = $self->param('project');
  my $dir = $self->param('dir') // 'Nothing';
  
  # 描画
  $self->render(
    'index',
    user => $user,
    project => $project,
    dir => $dir
  );
};

any '/http-method' => sub {
  my $self = shift;

  # HTTPメソッドの取得
  my $http_method = $self->req->method;

  $self->render(text => "HTTP Method: $http_method");
};

app->start;

__DATA__

@@ index.html.ep
<%
  my $user = stash('user');
  my $project = stash('project');
  my $dir = stash('dir');
%>
<html>
  <head>
    <title>Routing</title>
  </head>
  <body>
    User: <%= $user %><br>
    Project: <%= $project %><br>
    Directory: <%= $dir %></br>
  </body>
</html>