Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Carton at London Perl Workshop 2013
Search
Tatsuhiko Miyagawa
November 30, 2013
Technology
0
280
Carton at London Perl Workshop 2013
Tatsuhiko Miyagawa
November 30, 2013
Tweet
Share
More Decks by Tatsuhiko Miyagawa
See All by Tatsuhiko Miyagawa
Carmel at YAPC::EU 2015
miyagawa
0
560
Managing CPAN dependencies with Carton
miyagawa
0
350
What's new in Carton and cpanm at YAPC::Asia 2013
miyagawa
6
1.3k
Carton 1.0 at OSCON 2013
miyagawa
11
2.3k
cpanm 1.6 at OSDC.TW
miyagawa
6
1.3k
10 more things to be ripped off
miyagawa
7
1.4k
Ruby; Exported
miyagawa
1
1k
10 Years: LL, you and me
miyagawa
2
220
Plack 1.0 announcement at OSCON
miyagawa
1
290
Other Decks in Technology
See All in Technology
ECMAScript仕様の最新動向: プロセスの変化と仕様のトレンド
uhyo
1
300
AI/MLのマルチテナント基盤を支えるコンテナ技術
pfn
PRO
4
610
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
15k
【保存版】「ガチャ」からの脱却:Gemini × Veoで作る、意図を反映するAI動画制作ワークフロー
nekoailab
0
130
『星の世界の地図の話: Google Sky MapをAI Agentでよみがえらせる』 - Google Developers DevFest Tokyo 2025
taniiicom
0
460
MCP・A2A概要 〜Google Cloudで構築するなら〜
shukob
0
120
あなたの知らないDateのひみつ / The Secret of "Date" You Haven't known #tqrk16
expajp
0
110
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
37k
OpenShiftのBGPサポート - MetalLB+FRR-k8s編
orimanabu
0
130
Claude Code はじめてガイド -1時間で学べるAI駆動開発の基本と実践-
oikon48
38
20k
Docker, Infraestructuras seguras y Hardening
josejuansanchez
0
130
私のRails開発環境
yahonda
0
170
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
KATA
mclloyd
PRO
32
15k
Building an army of robots
kneath
306
46k
Faster Mobile Websites
deanohume
310
31k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Transcript
Carton managing CPAN dependencies Tatsuhiko Miyagawa @miyagawa London Perl Workshop
2013 Saturday, November 30, 13
Me • Tatsuhiko Miyagawa • Lives in San Francisco •
{github,twitter,CPAN}/miyagawa Saturday, November 30, 13
Thank You! Saturday, November 30, 13
Managing CPAN Dependencies Saturday, November 30, 13
How many CPAN modules your app depends on? Saturday, November
30, 13
When is the last time upgrading a CPAN module broke
your app? Saturday, November 30, 13
Case Study: Web App Development Saturday, November 30, 13
You’re writing a new web app using as many CPAN
modules. Saturday, November 30, 13
Get them from CPAN, install on your machine. Saturday, November
30, 13
john@local> cpanm Web::Framework installed LWP-‐5.912 installed Plack-‐0.9980 installed Web-‐Framework-‐1.10 Saturday,
November 30, 13
Test it... Saturday, November 30, 13
Works? Ship it! Saturday, November 30, 13
What if ... Saturday, November 30, 13
• Jul 2nd: Started working on project • using Web::Framework
1.1 • Jul 9th: Finished version 1.0 • Jul 10-15th: internal beta, QA • Jul 16th: Deploy to the production Saturday, November 30, 13
• Jul 2nd: Started working on project • using Web::Framework
1.1 • Jul 9th: Finished version 1.0 • Jul 10-15th: internal beta, QA • Jul 15th: Web::Framework 1.2 is released • Jul 16th: Deploy to the cloud/production Saturday, November 30, 13
root@prod> cpanm Web::Framework installed LWP-‐5.912 installed Plack-‐0.9980 installed Web-‐Framework-‐1.20 Saturday,
November 30, 13
Web::Framework 1.2 API changes! Saturday, November 30, 13
Saturday, November 30, 13
“Upgrading CPAN modules broke my app” Saturday, November 30, 13
Dependencies are part of your app. Saturday, November 30, 13
a solution cpanm 1.6 Saturday, November 30, 13
> cpanm Web::
[email protected]
installed Web-‐Framework-‐1.10 Saturday, November 30, 13
> cpanm Web::Framework~">= 1.0, < 1.2" installed Web-‐Framework-‐1.19 Saturday, November
30, 13
♥ MetaCPAN Saturday, November 30, 13
a solution cpanfile + cpanm 1.6 Saturday, November 30, 13
> cat cpanfile requires 'Web::Framework', '== 1.10'; > cpanm -‐-‐installdeps
. installed Web-‐Framework-‐1.10 Saturday, November 30, 13
cpanfile DSL to describe prereqs Saturday, November 30, 13
requires 'Catalyst', '5.8000'; recommends 'JSON::XS', '2.0'; on 'test' =>
sub { requires 'Test::More', '>= 0.96' }; on 'develop' => sub { recommends 'Devel::NYTProf'; }; feature 'sqlite' => sub { requires 'DBD::SQLite'; }; Saturday, November 30, 13
inspired by: gemfile(5) Saturday, November 30, 13
Compatible to: Module::Install(::DSL) Saturday, November 30, 13
Converted to: CPAN::Meta::Prereqs Saturday, November 30, 13
Toolset Module::CPANfile Module::Install::CPANfile Dist::Zilla plugins Saturday, November 30, 13
Supported by dzil, Milla & cpanm 1.6 Saturday, November 30,
13
cpanfile + cpanm • Simple • Yet powerful and flexible
way to describe dependencies and version requirements • Version control cpanfile Saturday, November 30, 13
caveats • Locking each dependency with specific version is tedious
work • Can only lock direct dependencies • MetaCPAN as SPOF • No easy/reliable way to rollback Saturday, November 30, 13
Many other solutions Needs servers, Needs databases Too simple, Too
complicated, etc. Saturday, November 30, 13
the new Solution Saturday, November 30, 13
Carton https://github.com/miyagawa/carton Saturday, November 30, 13
Inspired by... Saturday, November 30, 13
Saturday, November 30, 13
Basic idea: Describe CPAN dependencies snapshot tarball pathnames Saturday, November
30, 13
Built on top of: cpanfile + cpanm 1.7 Saturday, November
30, 13
• App-specific local environment • Fast and safe install with
caches • Dep-tree analysis, including versions • Freezing module versions • Conservative updates • Easy Redeployment, Rollback • Single-file, VCS friendly Saturday, November 30, 13
Local perl environment Using local::lib and cpanm -L Each app
has an isolated local library path Saturday, November 30, 13
Fast and safe install Saves MYMETA.json and install meta info
Saturday, November 30, 13
Dep tree analysis Rebuild the dependency tree from snapshot Checks
if anything is missing/superfluous Saturday, November 30, 13
Freezing versions Versions are saved in snapshots including dependencies Saturday,
November 30, 13
Easy Redeployment Reinstall exactly the same set of modules on
another prod/development machines. Saturday, November 30, 13
Conservative Update Modules won't be upgraded unless it is required,
or manually updated. Saturday, November 30, 13
Single-file, VCS friendly You can add cpanfile.snapshot to git update
whenever you update modules "Dependencies are part of your app." Saturday, November 30, 13
Safe and easy rollback revert the lock file and redeploy
Saturday, November 30, 13
DEMO Saturday, November 30, 13
Deployment with Carton Saturday, November 30, 13
@local> carton install @local> git commit cpanfile.snapshot @local> git push
@remote> carton install -‐-‐deployment @remote> carton exec plackup ... Saturday, November 30, 13
Example: github.com/miyagawa/cpanmetadb-perl capistrano, Server::Starter, carton, plackup (twiggy) Saturday, November 30,
13
PaaS/Cloud github.com/miyagawa/heroku-buildpack-perl Saturday, November 30, 13
Saturday, November 30, 13
http://weblog.bulknews.net Saturday, November 30, 13
Support to come! Dokku, DotCloud, Travis CI, Cloud Foundry etc.
Saturday, November 30, 13
carton 1.0 on CPAN Saturday, November 30, 13
> cpanm Carton Saturday, November 30, 13
Preview: next major releases Saturday, November 30, 13
cpanm 1.8 git (+ any URL) support in index Saturday,
November 30, 13
cpanfile 1.1 git syntax support Saturday, November 30, 13
requires 'Plack', '1.0000', git => 'git://github.com/plack/Plack.git', ref =>
'devel'; carton 1.1 Saturday, November 30, 13
requires 'Plack', '1.0011', dist => 'MIYAGAWA/Plack-‐1.0011.tar.gz'; carton 1.1 Saturday,
November 30, 13
requires 'Plack', '1.0011', dist => 'http://darkpan/Plack-‐1.tar.gz'; carton 1.1 Saturday,
November 30, 13
(demo) Saturday, November 30, 13
cpanm 1.8 • Rewrite internals • Backend API • Plugin
support • CPAN Testers support (via plugins) Saturday, November 30, 13
carton 1.1 • binstubs • configure args/hints support • safe
exec on development • remember options (--path etc.) Saturday, November 30, 13
github.com/miyagawa/carton irc.perl.org #carton Saturday, November 30, 13
speakerdeck.com /miyagawa Saturday, November 30, 13
gum.co/BmXz Saturday, November 30, 13
Questions? Saturday, November 30, 13