Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Carton at London Perl Workshop 2013
Search
Tatsuhiko Miyagawa
November 30, 2013
Technology
330
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Carton at London Perl Workshop 2013
Tatsuhiko Miyagawa
November 30, 2013
More Decks by Tatsuhiko Miyagawa
See All by Tatsuhiko Miyagawa
Carmel at YAPC::EU 2015
miyagawa
0
620
Managing CPAN dependencies with Carton
miyagawa
0
390
What's new in Carton and cpanm at YAPC::Asia 2013
miyagawa
6
1.4k
Carton 1.0 at OSCON 2013
miyagawa
11
2.4k
cpanm 1.6 at OSDC.TW
miyagawa
6
1.4k
10 more things to be ripped off
miyagawa
7
1.5k
Ruby; Exported
miyagawa
1
1.1k
10 Years: LL, you and me
miyagawa
2
270
Plack 1.0 announcement at OSCON
miyagawa
1
330
Other Decks in Technology
See All in Technology
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
150
SREでアラート疲れを 解決しよう!
kairim0
1
200
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
140
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
10
3.2k
FactoryBotアンチパターン / factory_bot anti-patterns
toshimaru
0
140
AI時代のAPI開発を加速する品質ガードレール / API Quality Guardrails in the AI Era
yokawasa
0
160
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
360
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
120
Meet AgentCore Identity Consent Portal
hironobuiga
3
190
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
0
260
予測不能な実行エージェントを安全にサクッと試せるサンドボックス環境の話
sansantech
PRO
0
130
OpenSharing について熱く語る〜AI アセットの共有について〜
kameitomohiro
0
230
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
350
The untapped power of vector embeddings
frankvandijk
2
1.9k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
A designer walks into a library…
pauljervisheath
211
25k
Code Reviewing Like a Champion
maltzj
528
40k
The Pragmatic Product Professional
lauravandoore
37
7.5k
Product Roadmaps are Hard
iamctodd
55
13k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
Navigating Weather and Climate Data
rabernat
0
550
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
480
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