Using Dancer

6,628
-1

Published on

Published in: Technology, Art & Photos
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,628
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Using Dancer

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

    Clipping is a handy way to collect important slides you want to go back to later.

×