(1)はこちら、(2)はこちらから。 汎用的なPlack::Middlewareを書く さて、いろいろなPlack::Middlewareを利用していると、CPANにはないものが欲しくなって自分で書く場面がやってきます。ただ、Plack::Middlewareの実装にはPSGIの仕様上いくらか気を付けなければいけない点があり、ゼロから汎用的なものを目指すのは大変です。ここで紹介するユーティリティを利用すると、そうした問題を避けることができます。Plack::Middlewareを作る際には、ぜひ活用しましょう。 Plack::Util::Accessor──アクセサの生成 Plack::Util::Accessorを利用することで、Class::Accessor::Fastのようなアクセサモジュールを継承することなく、アクセサを生成できます。 Plack::Middlewareは、次の
依頼は突然やってきて、Perlも長く書いているとこういう素晴らしい機会に恵まれることがあるのだと感激しながら引き受けたものの、みなさんが「シン・ゴジラ」や「君の名は。」を楽しんでいるころ、私は初の商業誌原稿の執筆にヒィヒィ汗を流していました。 本日、2016/10/22 WEB DB PRESS vol.95 発売ですよ!! というわけで、Perl Hackers Hub のコーナーで「Plack::Middleware再入門」というタイトルで書かせて頂きました。Plack/PSGIと外の世界をつなぐ架け橋 Plack::Middleware にフォーカスしております。安定と信頼の Plack/PSGI については、Perl Hackers Hub で過去に2回紹介されており( miyagawaさんによる第1回 と kazeburoさんによる第24回 )、今回で3回目ということもあり、Pl
Plack::Middleware::PostErrorToSlackというのを書いた.これは何かというと,アプリケーションの例外を自動的にSlackに投げるやつ. 使い方は簡単で,Incoming WebhookのURLを設定するだけ.あとは例外を起こすだけ. enable "PostErrorToSlack", webhook_url => 'https://hooks.slack.com/services/...'; それで,Slackにこんなのが出る. 誰が,どのブランチで,何をしたら,こういうエラーが出ましたよ,というのがSlackに投稿される.uriメソッド呼びたいけどなんかおかしそう,とか分かる. これだと寂しいので,😇な絵文字などを設定すると,😇感が出て良くなる. enable "PostErrorToSlack", webhook_url => 'https://ho
A discussion came up on #plack IRC channel earlier, and we realize that there’s no good (official) documentation available to address the differences between the two popular Plack HTTP servers, Starman and Starlet. Besides the similarity in their names, they are actually similar in what they do: they do serve HTTP requests, and the process model is pre-forked (i.e. fork off a number of HTTP worker
1) Gazelle is a fast PSGI/Plack HTTP server written in Perl and C code. 2) Benchmarks show it can handle 3x more requests per second than other servers for simple applications. 3) Its speed comes from optimizations like using accept4, writev system calls, and being written mostly in fast C code via XS.Read less
plackupコマンド Plackに同封のHTTP::Server::PSGIでサーバを立ち上げる。 その際に、「ssl」「ssl-key-file」「ssl-cert-file」オプションで、 先ほど作成したファイルを指定してSSLを有効にする。 $ plackup -s HTTP::Server::PSGI --ssl-key-file server.key --ssl-cert-file server.crt --ssl 1 app.psgi HTTP::Server::PSGI: Accepting connections at https://0:5000/ これで、httpsでListenするサーバが立ち上がる。 ヘッダの追加 ばあいによっては、 アプリに渡すヘッダにX-Forwarded-HTTPSのような情報を渡す必要が出てくる。 Mojoliciousでは、X-Forwa
I write lots of code. But I want to be better and faster at reading code. When I had the privilege of working with @ranguard I discovered he is a code reading cheetah and I always envied that. So I’ve decided to practice by reading the source code of various CPAN modules. I’m starting with Plack. Part 1 - An Overview Part 2 - plackup Architecture Part 3 - PSGI Application Architecture Part 4 - Pla
@takezawaさんから、PerlベースのWebアプリケーションサーバであるStarletで複数ポートをlistenできるようにするPRをいただいたのでマージしました。やったね! で、それに伴いprefork型TCPサーバのThundering Herd問題を再訪したので、その備忘録。なお、Thundering Herd問題については、prefork サーバーと thundering herd 問題 - naoyaのはてなダイアリーや、Starman と Starlet のベンチマークと Accept Serialization - Hateburo: kazeburo hatenablogあたりを参照のこと。 まず、こんなテストスクリプトを書いた: thundering-herd.pl こいつを書いてあるコメントのとおり実行してみることで、2種類のケースでThundering Herd
11/20(水)夜にPSGI/Plack初のオンリーイベント(たぶん?)に行ってきました。 Shibuya Plack/PSGI Conference (shibuya.pl) #1 http://atnd.org/events/45276 本編 普通に使う Plack/PSGI Server - @fujiwara http://dl.dropboxusercontent.com/u/224433/plackcon/index.html 去年、小規模ながらWeb APIを書くことになり、一人、初めてPSGI/Plackを使うと決め、 調べながらMiddlewareを選定し、Starmanを立ち上げ、Supervisordで管理するなどしていた。 fujiwaraさんのトークの前半では挙手アンケートをしていて、 そこで↑がそれほど外した構成でないことが知れて一安心(?) 身内向けなので性能
English document is available on metacpan! Plack::Middleware::Session::Simpleをリリースしました。Plack::Middleware::Session(Store::Cache & State::Cookie)と互換性を保ちながら、効率よく動作することを狙っています。 必要なときに必要なだけ Set-Cookie ヘッダを発行する 必要なときだけストレージにアクセスする 弊社のようなハイトラフィックなサービスを運営している場合には、できるだけリソースをケチりたいので、そういう思想なものが必要となった。互換性があるので負荷が低いところで使っても問題が起きないと思う。 使い方 Plack::Middleware::Sessionで以下のように設定していたなら、 my $cache = Cache::Memory::Si
はい、というわけで自分のトークです: 昨年12月頃から関わってるlivedoorBlogのコードを触っていた時の憤りをスライドにぶつけてみました。 追記:スライドに「ログにマーカーをつける」というのは、(コード読んでないけど)多分こちらのエントリにあるLog::Minimal::Indentとだいたい同じ感じのヤツです ところでWeb上で見かける感想の中でこんなのがありました: 今年個人的に一番衝撃的だったのはやっぱ、livedoor blogのPlack化です。技術的な側面もさることながら、ああいう近視眼的には何のメリットもないし、逆にデメリットの方が大きそうな案件にリソースを割くジャッジができる会社としての姿勢が本当に凄いなと。 実はビジネス的にも意味はあるんだなー。 なかなか書くことができなかったんだけど、その内容というのがこちらと→ ブログのお引っ越し機能を大幅に強化しました! (
開発環境と本番環境で favicon を変える というのに感動したのでPlack middlewareでやってみました。 単に favicon.ico ないし favicon.png という名前にマッチしたらグレースケールにして返すというだけの代物ですが、enable_ifで簡単に導入できるのが楽かなと。 使い方は以下のとおり。P::M::Staticの前にenableしてください。 builder { enable_if { $ENV{PLACK_ENV} eq 'development' } 'DevFavicon'; enable 'Static', path => qr{/favicon\.(?:ico|png)$}, root => $path_to_assets; ...; }; https://github.com/gfx/Plack-Middleware-DevFavico
MTでは5.2.4からレジストリを使ってPSGIミドルウェアを各アプリケーションに適用できるようになっているので、この仕組を使ってMTを拡張する方法をいくつか考えてみました。(検証したのはMT6 Beta1です) 公式ドキュメント PSGIミドルウェアとは PSGIミドルウェアとは、PSGIアプリケーションに対してリクエスト時の環境やレスポンスを動的に書き換えるための仕組みです。PSGIミドルウェアを使うことでレスポンスのHTMLを書き換えたり、認証のレイヤーを別に挟んだりということができます。MTはプラグインによる拡張の方法が充実しているので、機能の拡張としてはそれで事足りる部分も多いですが、 PSGIミドルウェアの資産(MTに限らない)を利用することができる 拡張するためにMTの知識を必要としない という点がPSGIミドルウェアを利用するメリットであると思います。 逆にMTでPSGIミ
YAPC::Asia Tokyo 2013 にて「PSGI/Plack・Monocerosで学ぶハイパフォーマンスWebアプリケーションサーバの作り方」というはなしをします。 トークの内容は 先日、MonocerosというPlack::Handler(サーバ)をリリースしました。MonocerosはStarmanやStarletと同じくPrefork型ですが、AnyEventを使い、C10Kのような多数のコネクションを捌くことができる特徴を持ち、非常に高いパフォーマンスを備えています。 このセッションではStarmanやStarlet、Twiggyといった各Plack::Handlerの内部構成の簡単な紹介、Monocerosを実装する上で学んだPlack::Handlerの構成や作成方法から、forkやUNIXプロセス、Linux TCPの話を交えて、高性能なWebアプリケーションサーバ
Currently this talk is in PENDING state. If you would like to see this talk at the event, please consider using the social media buttons below to express your interest! 定番となって久しい Plack。 もはや YAPC::Asia で Plack の話は期待されないのではないかとささやかれるほど普及が著しいきょうこのごろですが、このセッションではあらためて Plack の概要と 便利な Plack::Middleware / Plack::App の紹介、さらに、それらのモジュールの書き方やテストについて話したいと思います。 いまさら聞けない当たり前の話から意外な Hack まで、主に入門者向けを目指しつつも、できる限り内
PSGI/Plack/PSGIアプリケーションを動かす時に一番使われているのは plackup でしょう。 $ cat app.psgi use Plack::Builder; use MyApp; my $app = MyApp->psgi_app; builder { enable 'ServerStatus::Lite', => ..; $app; }; $ plackup -E production -s Starlet --max-workers 30 --port 5000 -a app.psgi plackup コマンドの -s にハンドラ名を指定して起動します。本番環境では -E や $ENV{PLACK_ENV} を指定してStackTraceやLintといった開発に便利なPlack::Middlewareが追加されないようにする必要がありますね。 Starmanの場合は
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く