Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
270
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
550
Managing CPAN dependencies with Carton
miyagawa
0
340
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
210
Plack 1.0 announcement at OSCON
miyagawa
1
280
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
11
77k
リーダーになったら未来を語れるようになろう/Speak the Future
sanogemaru
0
270
SwiftUIのGeometryReaderとScrollViewを基礎から応用まで学び直す:設計と活用事例
fumiyasac0921
0
140
Geospatialの世界最前線を探る [2025年版]
dayjournal
3
490
Goに育てられ開発者向けセキュリティ事業を立ち上げた僕が今向き合う、AI × セキュリティの最前線 / Go Conference 2025
flatt_security
0
350
OCI Network Firewall 概要
oracle4engineer
PRO
1
7.8k
AIが書いたコードをAIが検証する!自律的なモバイルアプリ開発の実現
henteko
1
330
KMP の Swift export
kokihirokawa
0
330
What is BigQuery?
aizack_harks
0
130
後進育成のしくじり〜任せるスキルとリーダーシップの両立〜
matsu0228
6
2.2k
Why React!?? Next.jsそしてReactを改めてイチから選ぶ
ypresto
10
4.4k
バイブコーディングと継続的デプロイメント
nwiizo
2
410
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
610
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
Context Engineering - Making Every Token Count
addyosmani
5
180
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Thoughts on Productivity
jonyablonski
70
4.9k
Documentation Writing (for coders)
carmenintech
75
5k
YesSQL, Process and Tooling at Scale
rocio
173
14k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
The Cult of Friendly URLs
andyhume
79
6.6k
Fireside Chat
paigeccino
40
3.7k
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