2015-03-25_gotanda.pm4
by
SUZUKI Masashi
×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
mod_perl to PSGI/Plack Gotanda.pm #4 LT すずきまさし / @masasuz 2015/03/17 1
Slide 2
Slide 2 text
おまえだれよ すずきまさし / @masasuz 五反田の辺りにある中小web企業 開発/運用基盤的整備 社内システム開発 zsh / perl / MySQL / Ubuntu / Debian / i☆Ris 2
Slide 3
Slide 3 text
最近使っている ツール/技術/ミドルウェア Elasticsearch + Kibana Fluentd Gitbucket 3
Slide 4
Slide 4 text
今年使いたい ツール/技術/ミドルウェア Docker Ansible Sensu 4
Slide 5
Slide 5 text
mod_perl to PSGI/Plack Gotanda.pm #4 LT すずきまさし / @masasuz 2015/03/17 5
Slide 6
Slide 6 text
8年近く前から動いているmod_perlなプ ロジェクト群をPSGI/Plack化しようと している。というお話です。 新規で作るプロジェクトはPSGI/Plack で動いてます。 現在進行形です。 6
Slide 7
Slide 7 text
もくじ 現状がどうなってるのか どう変えるのか やったこと 発生した問題 7
Slide 8
Slide 8 text
新しめの プロジェクト現状 Amon2 Starlet + Server::Starter + Upstart 独自ビルドしたperl(5.18) (Perl::Build) cpanfileでのモジュール管理(Carton) 社内モジュールはDarkpanで管理 (OrePAN2::Server) 8
Slide 9
Slide 9 text
古めの プロジェクトの現状 Sledge+MoFedge (Splite, Amon2) Apache+mod_perl system perl deb package + CPANプロジェクト 9
Slide 10
Slide 10 text
古めのプロジェクト 何がつらかったか 10
Slide 11
Slide 11 text
sytem perlつらい ディストリビューションが変わる (updateする)とperlのバージョンが変 わる ディストリビューションupdateのた びの検証つらい とはいえ、セキュリティー関連でい つまでも古いディストリビューショ ンを使うわけにはいかない 11
Slide 12
Slide 12 text
Apache+mod_perlつらい プロジェクト同居しているときにプロ ジェクト毎にextlibが設定できない。 同じプロセスのメモリに載ってるた め update . . . . . 12
Slide 13
Slide 13 text
debian packageつらい 全システム同じバージョンのモジュー ル 新しいモジュール使いにくい バージョン上げにくい 13
Slide 14
Slide 14 text
CPANプロジェクト? 14
Slide 15
Slide 15 text
CPANプロジェクト? CPANモジュールを雑多に突っ込んだプ ロジェクト バージョン管理? 食べられるの? アーキテクチャ? 美味しいの? パッチ管理? 必要なの? 15
Slide 16
Slide 16 text
CPANプロジェクト つらい どのバージョンが入ってるのかよく分 からん x86でビルドされたXS ※現在はない 独自パッチあたってる。けど、どれが あたってるのかよく分からん 16
Slide 17
Slide 17 text
つらい 17
Slide 18
Slide 18 text
新しめの プロジェクト現状 Amon2 Starlet + Server::Starter + Upstart 独自ビルドしたperl (Perl::Build) cpanfileでのモジュール管理(Carton) 社内モジュールはDarkpanで管理 (OrePAN2::Server) 18
Slide 19
Slide 19 text
アーキテクチャ変更 Sledge+MoFedge => PSGI対応する Apache+mod_perl => Starlet + Server::Starter + Upstart system perl => 独自ビルドしたperl deb package + CPANプロジェクト => carton cpanfile 19
Slide 20
Slide 20 text
WAF以外は新しめの プロジェクトと同じ 20
Slide 21
Slide 21 text
やらないといけないこと SledgeのPSGI対応 CPANに上がっていないにSledge系のモジュールを Darkpanに登録 CPANに雑多に突っ込まれてるモジュールの分離。 Darkpanへの登録 プロジェクトで使用しているモジュールのバージョン の特定およびcpanfile作成 基本今動いてるのと同じバージョンを使うように プロジェクトコード自体をPSGI対応する 21
Slide 22
Slide 22 text
SledgeのPSGI対応 PSGI対応してあるSledgeに社内の独自 パッチがあたったSledgeをマージ https://github.com/tokuhirom/ Sledge/tree/feature-psgi Sledge::DispatcherもPSGI対応 22
Slide 23
Slide 23 text
CPANプロジェクトからの モジュール分離 ディストリビューション名を把握 バージョンを把握 パッチがあたってないかを把握 あたっていればバージョン番号を変 えた上で、Darkpanに登録 23
Slide 24
Slide 24 text
プロジェクトで使用している モジュールの特定 dpkg-query —show ‘lib*-perl’の結果 からモジュール名とバージョンを抽出 その結果からmetacpanのElasticsearchに 問い合わせて https://gist.github.com/masasuzu/ b9da1890c51ae2dbc724 scan-prereqs-cpanfileの結果と照合して あげる 24
Slide 25
Slide 25 text
プロジェクトコードの PSGI対応 頼みの綱はテスト %ENVを参照しているところを$req->env から取るように変える。 Apache::Request前提になっている箇所 を変えてあげる 25
Slide 26
Slide 26 text
ふー 26
Slide 27
Slide 27 text
予想しない問題 古めモジュールがcarton install出来 ない 古めの記法を使っているがゆえの 大量のwarnings よく分からないsyntax error 27
Slide 28
Slide 28 text
古めのモジュールが carton installできない cpanfileに指定してるバージョンが見つ からないと言われる 仕方ないのでtarを落としてきてDarkpan に登録する cpanfileでバージョン指定しないとこ の古いバージョンで入るのが罠 現状全てのプロジェクトが同じ Darkpanを参照してるので。。。 28
Slide 29
Slide 29 text
古い記法 for $hoge qw( ) { } defined @hoge defined %hoge 29
Slide 30
Slide 30 text
依存モジュール内の 古い記法 パッチを当てて、Darkpanに登録。。。 30
Slide 31
Slide 31 text
ふー 31
Slide 32
Slide 32 text
古い依存モジュール (細かい系) Jcode Data::Visitor::Encode base これだけはparentに変えた UNIVERSAL::require 32
Slide 33
Slide 33 text
まとまらないまとめ Sledge自体のPSGI対応は楽 テストさえ書かれてれば、プロジェクトの対応はそれ ほど難しくない。 まだ本番には投入してない プロジェクトの人のチェック待ち 熟成されたコードをいきなり直すのはだいぶつらいの で、悪い意味で熟成される前に対処した方がよい。 ホントに。。。 33
Slide 34
Slide 34 text
ありがとう ございました 34