• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Using Dancer
 

Using Dancer

on

  • 4,279 views

 

Statistics

Views

Total Views
4,279
Views on SlideShare
2,568
Embed Views
1,711

Actions

Likes
1
Downloads
2
Comments
0

5 Embeds 1,711

http://hokkaido.pm.org 866
http://blog.vitamin11.org 837
http://webcache.googleusercontent.com 4
http://www.perl-hokkaido.org 3
http://8653813949780496014_f6f0ae1c8d4ca147c59413e78a27fc365af98d50.blogspot.com 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Using Dancer Using Dancer Presentation Transcript

    • DancerでWebアプリ再入門 Hokkaido.pm#7 Yoshihiro Sasaki
    • 自己紹介
    • 自己紹介@aloelight
    • 自己紹介@aloelight札幌在住
    • 自己紹介@aloelight札幌在住PerlでWebアプリ開発
    • 自己紹介@aloelight札幌在住PerlでWebアプリ開発サーバ保守・運用
    • まず初めに
    • まず初めに@riywoさん
    • まず初めに @riywoさんお越し頂きありがとうございます!
    • 今回のテーマはWebアプリ再入門
    • Dancer使ってみました
    • AWS Health Info
    • AWS Health Info• Twitterアカウントでログイン
    • AWS Health Info• Twitterアカウントでログイン• AWS Service Healthをチェック
    • AWS Health Info• Twitterアカウントでログイン• AWS Service Healthをチェック• 登録者にお知らせ
    • 間に合いませんでした! てへぺろ☆(・ω<)
    • • 表側のみ作ってあって、裏側の@送信 とかないです
    • • 表側のみ作ってあって、裏側の@送信 とかないです• でも、ドメインを勢いで取ったので後 で実装します
    • • 表側のみ作ってあって、裏側の@送信 とかないです• でも、ドメインを勢いで取ったので後 で実装します• さくらVPSで動かしてます
    • アジェンダ1. Dancerの紹介2. Dancerの基本文法3. AWS Health Infoのソースを読む
    • Dancerの紹介
    • Dancerの特徴
    • Dancerの特徴• Sinatra系のPerl製WAF
    • Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル
    • Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル• 豊富なプラグイン
    • Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル• 豊富なプラグイン• 意外と豊富なドキュメント
    • まずはインストールする
    • $ cpanm Dancer
    • Hello, worlduse Dancer;get / => sub { return Hello, world;};dance;
    • $ ./hello.pl$ curl localhost:5000Hello, world
    • 簡単ですね!
    • もう少し複雑なプロジェクトのときは?
    • $ dancer -a MyApp
    • シンプル
    • シンプル
    • シンプル• 基本は use Dancer するだけ
    • シンプル• 基本は use Dancer するだけ• Dancer.pmがexportする関数を使う
    • シンプル• 基本は use Dancer するだけ• Dancer.pmがexportする関数を使う• クラス構成もシンプル
    • EXPORTSconfig redirectcookie requestdebug send_errorforward setget sessionlayout templateparam uri_forpost その他諸々
    • 豊富なプラグイン
    • 豊富なプラグイン
    • 豊富なプラグイン• Dancer::Plugin 94件
    • 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件
    • 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件• Catalyst::Plugin 320件
    • 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件• Catalyst::Plugin 320件• Amon2::Plugin 12件
    • メジャーなPlugin
    • メジャーなPlugin• Dancer::Plugin::Database
    • メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC
    • メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email
    • メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email• Dancer::Plugin::Thumbnail
    • メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email• Dancer::Plugin::Thumbnail• Dancer::Plugin::Facebook
    • もっと知りたい方は Dancer plugins ecosystemhttp://advent.perldancer.org/2011/17
    • Pluginの作り方package Dancer::Plugin::LinkBlocker;use Dancer :syntax;use Dancer::Plugin;register block_links_from => sub { my $conf = plugin_setting(); my $re = join( |, @{ $conf->{hosts} } ); before sub { if ( request->referer && request->referer =~ /$re/ ){ status 403 || $conf->{http_code}; } };};register_plugin;1;
    • ドキュメント
    • ドキュメント
    • ドキュメント• Dancer::Introduction
    • ドキュメント• Dancer::Introduction• Dancer::Tutorial
    • ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook
    • ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook• Dancer::Plugins
    • ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook• Dancer::Plugins• Dancer::Deployment
    • httpd.conf<VirtualHost *:80> ServerName www.example.com DocumentRoot /srv/www.example.com/public ServerAdmin you@example.com <Directory "/srv/www.example.com/public"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all AddHandler cgi-script .cgi </Directory> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /dispatch.cgi/$1 [QSA,L] ErrorLog /var/log/apache2/www.example.com-error.log CustomLog /var/log/apache2/www.example.com-access_log common</VirtualHost>
    • Dancerの基本文法
    • Routingget / => sub { return Hello, world;};any [get,post] => / => sub { ...};
    • Routingget /user/:name => sub { my $name = param name;};get /user/* => sub { my ($name) = splat;};
    • Request Parametersget / => sub { my $id = param id;};post / => sub { my $id = param id; my $file = upload(file); # Dancer::Request::Upload object $file->copy_to(/path/to/flie);};
    • Request Parameters# GET /entry/foo?id=barget /entry/:id => sub { my $id = param id; # $id => foo};# 追記 paramsを使えばデータソース別に取れます# perldoc Dancer::Request# Fetching_only_params_from_a_given_source
    • Configset tmdpir => /tmp/myapp;get / => sub { my $config = config; return $config->{appname};};
    • Cookieget /login => sub { my $id = param id; my $password = param password; if ( $id eq cto && $password eq onagatani ) { cookie logged_in => 1; redirect /; }};
    • Sessionset session => YAML;set session_dir => /tmp/sessions;set session_name => sid;# default dancer.sessionget /login => sub { my $id = param id; my $password = param password; if ( $id eq cto && $password eq onagatani ) { session user => { name => onagatani }; redirect /; }};
    • Templateset template => ‘template_toolkit’;get / => sub { my $id = param id; template index, { id => $id };};
    • 注意Dancer::Template::Simple IF, LOOPがありません
    • D::T::TemplateToolkitこちらを代わりに使いましょう
    • Databaseuse Dancer::Plugin::Database;get /entry/:id => sub { my $id = param id; my $data = database->quick_select( entry, { id => $id } );};
    • Redirectget /foo => sub { redirect /myaction;};get /bar => sub { # internal redirect forward /myaction;};
    • Loggingset logger => console;set log => debug;get /logging => sub { core foo; debug bar; info baz; warning hoge; error piyo;};
    • AWS Health Infoの ソースを読む
    • ご清聴ありがとうございました