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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Tatsuhiko Miyagawa
November 30, 2013
Technology
320
0
Share
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
580
Managing CPAN dependencies with Carton
miyagawa
0
370
What's new in Carton and cpanm at YAPC::Asia 2013
miyagawa
6
1.3k
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.4k
Ruby; Exported
miyagawa
1
1k
10 Years: LL, you and me
miyagawa
2
250
Plack 1.0 announcement at OSCON
miyagawa
1
310
Other Decks in Technology
See All in Technology
AI時代のガードレールとしてのAPIガバナンス
nagix
0
340
これからの「データマネジメント」の話をしよう
sansantech
PRO
0
170
Route 53 Global Resolver で高額課金発生!
otanikohei2023
0
130
アクセシビリティはすべての人のもの
tomokusaba
0
140
ServiceNow Knowledge 26 の歩き方
manarobot
0
250
需要創出(Chatwork)×供給(BPaaS) フライホイールとMoat 実行能力の最適配置とAI戦略
kubell_hr
0
1.4k
Google Cloud Next '26 の裏でこっそりリリースされたCloud Number Registry & Cloud Hub コスト分析 を試してみた
hikaru1001
0
120
生成AI時代のドキュメントに対する期待の整理と実践から得た学び / Rethinking Documentation for LLM: Lessons from Practice
bitkey
PRO
1
120
コードや知識を組み込む / Incorporate Code and Knowledge
ks91
PRO
0
180
Scovilleモバイルエンジニア募集中.pdf
julienrudin
0
130
音声言語モデル手法に関する発表の紹介
kzinmr
0
150
Anthropic「Long-running a gents」をGeminiで再現してみた
tkikuchi
0
720
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
230
Raft: Consensus for Rubyists
vanstee
141
7.4k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Ruling the World: When Life Gets Gamed
codingconduct
0
220
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.4k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
310
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
410
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
150
Code Review Best Practice
trishagee
74
20k
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