Using Dancer
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Using Dancer

on

  • 5,624 views

 

Statistics

Views

Total Views
5,624
Views on SlideShare
3,907
Embed Views
1,717

Actions

Likes
1
Downloads
2
Comments
0

5 Embeds 1,717

http://hokkaido.pm.org 867
http://blog.vitamin11.org 842
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 Presentation Transcript

  • 1. DancerでWebアプリ再入門 Hokkaido.pm#7 Yoshihiro Sasaki
  • 2. 自己紹介
  • 3. 自己紹介@aloelight
  • 4. 自己紹介@aloelight札幌在住
  • 5. 自己紹介@aloelight札幌在住PerlでWebアプリ開発
  • 6. 自己紹介@aloelight札幌在住PerlでWebアプリ開発サーバ保守・運用
  • 7. まず初めに
  • 8. まず初めに@riywoさん
  • 9. まず初めに @riywoさんお越し頂きありがとうございます!
  • 10. 今回のテーマはWebアプリ再入門
  • 11. Dancer使ってみました
  • 12. AWS Health Info
  • 13. AWS Health Info• Twitterアカウントでログイン
  • 14. AWS Health Info• Twitterアカウントでログイン• AWS Service Healthをチェック
  • 15. AWS Health Info• Twitterアカウントでログイン• AWS Service Healthをチェック• 登録者にお知らせ
  • 16. 間に合いませんでした! てへぺろ☆(・ω<)
  • 17. • 表側のみ作ってあって、裏側の@送信 とかないです
  • 18. • 表側のみ作ってあって、裏側の@送信 とかないです• でも、ドメインを勢いで取ったので後 で実装します
  • 19. • 表側のみ作ってあって、裏側の@送信 とかないです• でも、ドメインを勢いで取ったので後 で実装します• さくらVPSで動かしてます
  • 20. アジェンダ1. Dancerの紹介2. Dancerの基本文法3. AWS Health Infoのソースを読む
  • 21. Dancerの紹介
  • 22. Dancerの特徴
  • 23. Dancerの特徴• Sinatra系のPerl製WAF
  • 24. Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル
  • 25. Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル• 豊富なプラグイン
  • 26. Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル• 豊富なプラグイン• 意外と豊富なドキュメント
  • 27. まずはインストールする
  • 28. $ cpanm Dancer
  • 29. Hello, worlduse Dancer;get / => sub { return Hello, world;};dance;
  • 30. $ ./hello.pl$ curl localhost:5000Hello, world
  • 31. 簡単ですね!
  • 32. もう少し複雑なプロジェクトのときは?
  • 33. $ dancer -a MyApp
  • 34. シンプル
  • 35. シンプル
  • 36. シンプル• 基本は use Dancer するだけ
  • 37. シンプル• 基本は use Dancer するだけ• Dancer.pmがexportする関数を使う
  • 38. シンプル• 基本は use Dancer するだけ• Dancer.pmがexportする関数を使う• クラス構成もシンプル
  • 39. EXPORTSconfig redirectcookie requestdebug send_errorforward setget sessionlayout templateparam uri_forpost その他諸々
  • 40. 豊富なプラグイン
  • 41. 豊富なプラグイン
  • 42. 豊富なプラグイン• Dancer::Plugin 94件
  • 43. 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件
  • 44. 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件• Catalyst::Plugin 320件
  • 45. 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件• Catalyst::Plugin 320件• Amon2::Plugin 12件
  • 46. メジャーなPlugin
  • 47. メジャーなPlugin• Dancer::Plugin::Database
  • 48. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC
  • 49. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email
  • 50. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email• Dancer::Plugin::Thumbnail
  • 51. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email• Dancer::Plugin::Thumbnail• Dancer::Plugin::Facebook
  • 52. もっと知りたい方は Dancer plugins ecosystemhttp://advent.perldancer.org/2011/17
  • 53. 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;
  • 54. ドキュメント
  • 55. ドキュメント
  • 56. ドキュメント• Dancer::Introduction
  • 57. ドキュメント• Dancer::Introduction• Dancer::Tutorial
  • 58. ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook
  • 59. ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook• Dancer::Plugins
  • 60. ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook• Dancer::Plugins• Dancer::Deployment
  • 61. 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>
  • 62. Dancerの基本文法
  • 63. Routingget / => sub { return Hello, world;};any [get,post] => / => sub { ...};
  • 64. Routingget /user/:name => sub { my $name = param name;};get /user/* => sub { my ($name) = splat;};
  • 65. 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);};
  • 66. 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
  • 67. Configset tmdpir => /tmp/myapp;get / => sub { my $config = config; return $config->{appname};};
  • 68. Cookieget /login => sub { my $id = param id; my $password = param password; if ( $id eq cto && $password eq onagatani ) { cookie logged_in => 1; redirect /; }};
  • 69. 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 /; }};
  • 70. Templateset template => ‘template_toolkit’;get / => sub { my $id = param id; template index, { id => $id };};
  • 71. 注意Dancer::Template::Simple IF, LOOPがありません
  • 72. D::T::TemplateToolkitこちらを代わりに使いましょう
  • 73. Databaseuse Dancer::Plugin::Database;get /entry/:id => sub { my $id = param id; my $data = database->quick_select( entry, { id => $id } );};
  • 74. Redirectget /foo => sub { redirect /myaction;};get /bar => sub { # internal redirect forward /myaction;};
  • 75. Loggingset logger => console;set log => debug;get /logging => sub { core foo; debug bar; info baz; warning hoge; error piyo;};
  • 76. AWS Health Infoの ソースを読む
  • 77. ご清聴ありがとうございました