とりあえず. $ mojo generate lite-app css や js など静的ファイルは public フォルダに置く. プログラムでファイルを作成してダウンロードできるようにするには そのファイルも public以下に生成させると, hoge でアクセスできる. 外部テンプレートフォルダは templates で,hoge.html.ep などを置く. ! クライアントとして $ mojo get https://mojolicious.org $ ./myapp.pl get /foo $ ./myapp.pl get -M PUT -c '{"message":"Hello Mojo!"}' /hoge !! サンプル ! モデル 自動で生成されるのは,コントローラとビューの部分. ある程度規模が大きいものは,シングルファイルでなく,モジュールを用意する. つまり,コントローラ部分に埋め込まず,モデルを別ファイルに自前で書く. # mkdir -p lib/MyApp/Model # touch lib/MyApp/Model/Greet.pm # chmod 644 lib/MyApp/Model/Greet.pm lib/MyApp/Model/Greet.pm package MyApp::Model::Greet; use strict; use warnings; use experimental 'signatures'; sub new ($class) {bless {}, $class} sub greeting ($self, $name) { return "Hello $name"; } 1; myapp.pl #!/usr/bin/env perl use Mojolicious::Lite -signatures; use lib 'lib'; use MyApp::Model::Greet; helper greet => sub {state $greet = MyApp::Model::Greet->new}; get '/hello/:who' => sub ($c) { my $w = $c->stash('who'); my $msg = $c->greet->greeting($w); $c->render(text => $msg); }; app->start; Try ! $ ./myapp.pl get /hello/taro Hello taro ! フォームで JSON をやり取りするサンプル myapp.pl #!/usr/bin/env perl use Mojolicious::Lite -signatures; get '/' => sub ($c) { $c->render(template => 'index'); }; get '/form' => sub ($c) { $c->render(template => 'form'); }; put '/endpoint' => sub ($c) { my $hash = $c->req->json; $c->render(json => {n => ++$hash->{num}}); }; app->start; __DATA__ @@ index.html.ep % layout 'default'; % title 'Welcome';

Welcome to the Mojolicious real-time web framework!

@@ layouts/default.html.ep <%= title %> <%= content %> templates/form.html.ep % layout 'default'; % title 'Form Test'; Input number.
!! サーバ デプロイ ! Hypnotoad の FeeBSD用rc /usr/local/etc/rc.d/mojolicious #!/bin/sh # # PROVIDE: mojolicious # REQUIRE: DAEMON # KEYWORD: shutdown . /etc/rc.subr name=mojolicious rcvar=mojolicious_enable command="/usr/local/bin/hypnotoad" myprg="/home/mojolicious/myapp.pl" start_cmd="${command} ${myprg}" stop_cmd="${command} -s ${myprg}" load_rc_config ${name} run_rc_command "$1" ! Nginx リバースプロキシの最小限セットアップ nginx.conf upstream myapp { server 127.0.0.1:8080; } server { listen 80; server_name localhost; location / { proxy_pass http://myapp; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }