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 1.0 at OSCON 2013
Search
Tatsuhiko Miyagawa
July 25, 2013
Technology
2.4k
11
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Carton 1.0 at OSCON 2013
Introducing what's new in Carton at O'Reilly Open Source Convention 2013.
Tatsuhiko Miyagawa
July 25, 2013
More Decks by Tatsuhiko Miyagawa
See All by Tatsuhiko Miyagawa
Carmel at YAPC::EU 2015
miyagawa
0
610
Carton at London Perl Workshop 2013
miyagawa
0
320
Managing CPAN dependencies with Carton
miyagawa
0
380
What's new in Carton and cpanm at YAPC::Asia 2013
miyagawa
6
1.3k
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
1.1k
10 Years: LL, you and me
miyagawa
2
260
Plack 1.0 announcement at OSCON
miyagawa
1
310
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.3k
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
120
なぜ私たちのSREプラクティスはなかなか機能しないのか 〜システムより先に組織を見る〜 / Why our SRE practices aren't really working
vtryo
3
3.7k
証券システムを10年Scalaで作り続けるということ - 関数型まつり2026
krrrr38
3
840
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
4.5k
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
250
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
3.7k
はじめてのWDM
miyukichi_ospf
1
140
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
500
実装だけじゃない! CCA-F取得エンジニアが教えるClaude Code開発プロセス活用術
diggymo
2
680
“それは自分の仕事じゃない"を越えて行け
yuukiyo
0
190
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
9
1k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
The Cost Of JavaScript in 2023
addyosmani
55
10k
First, design no harm
axbom
PRO
2
1.2k
The Curse of the Amulet
leimatthew05
2
13k
The agentic SEO stack - context over prompts
schlessera
0
840
Un-Boring Meetings
codingconduct
0
340
Agile that works and the tools we love
rasmusluckow
331
22k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
500
How to build a perfect <img>
jonoalderson
1
5.8k
Building an army of robots
kneath
306
46k
Transcript
Carton 1.0 managing CPAN deps the right way Tatsuhiko Miyagawa
@miyagawa O'Reilly OSCON 2013 Wednesday, July 24, 13
Me • Tatsuhiko Miyagawa • Lives in San Francisco •
{github,twitter,CPAN}/miyagawa Wednesday, July 24, 13
Managing CPAN Dependencies Wednesday, July 24, 13
How many CPAN modules your app depends on? Wednesday, July
24, 13
When is the last time upgrading a CPAN module broke
your app? Wednesday, July 24, 13
Case Study: Web App Development Wednesday, July 24, 13
You’re writing a new web app using as many CPAN
modules. Wednesday, July 24, 13
Get them from CPAN, install on your machine. Wednesday, July
24, 13
john@local> cpanm Web::Framework installed LWP-‐5.912 installed Plack-‐0.9980 installed Web-‐Framework-‐1.10 Wednesday,
July 24, 13
Test it... Wednesday, July 24, 13
Works? Ship it! Wednesday, July 24, 13
What if ... Wednesday, July 24, 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 Wednesday, July 24, 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 Wednesday, July 24, 13
root@prod> cpanm Web::Framework installed LWP-‐5.912 installed Plack-‐0.9980 installed Web-‐Framework-‐1.20 Wednesday,
July 24, 13
Web::Framework 1.2 API changes! Wednesday, July 24, 13
Wednesday, July 24, 13
Wednesday, July 24, 13
“Upgrading CPAN modules broke my app” Wednesday, July 24, 13
Dependencies are part of your app. Wednesday, July 24, 13
a solution cpanm 1.6 Wednesday, July 24, 13
> cpanm Web::
[email protected]
installed Web-‐Framework-‐1.10 Wednesday, July 24, 13
> cpanm Web::Framework~">= 1.0, < 1.2" installed Web-‐Framework-‐1.19 Wednesday, July
24, 13
♥ MetaCPAN Wednesday, July 24, 13
a solution cpanfile + cpanm 1.6 Wednesday, July 24, 13
> cat cpanfile requires 'Web::Framework', '== 1.10'; > cpanm -‐-‐installdeps
. installed Web-‐Framework-‐1.10 Wednesday, July 24, 13
cpanfile DSL to describe prereqs Wednesday, July 24, 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'; }; Wednesday, July 24, 13
inspired by: gemfile(5) Wednesday, July 24, 13
Backward compatible to: Module::Install(::DSL) Wednesday, July 24, 13
Converted to to: CPAN::Meta::Prereqs Wednesday, July 24, 13
Toolset Module::CPANfile Module::Install::CPANfile Dist::Zilla plugins Wednesday, July 24, 13
Supported by dzil, Milla & cpanm 1.6 Wednesday, July 24,
13
cpanfile + cpanm • Simple • Yet powerful and flexible
way to describe dependencies and version requirements • Version control cpanfile Wednesday, July 24, 13
caveats • Locking each dependency with specific version is tedious
work • Can only lock direct dependencies • MetaCPAN as SPOF • No easy/reliable way to fallback Wednesday, July 24, 13
Many other solutions Needs servers, Needs databases Too simple, Too
complicated, etc. Wednesday, July 24, 13
the Solution Wednesday, July 24, 13
Carton https://github.com/miyagawa/carton Wednesday, July 24, 13
Inspired by... Wednesday, July 24, 13
Wednesday, July 24, 13
Basic idea: Describe CPAN dependencies snapshot tarball pathnames Wednesday, July
24, 13
Built on top of: cpanfile + cpanm 1.6 Wednesday, July
24, 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 Wednesday, July 24, 13
Local perl environment Using local::lib and cpanm -L Each app
has an isolated local library path Wednesday, July 24, 13
Fast and safe install Saves MYMETA.json and install meta info
Wednesday, July 24, 13
Dep tree analysis Rebuild the dependency tree from snapshot Checks
if anything is missing/superfluous Wednesday, July 24, 13
Freezing versions Versions are saved in snapshots including dependencies Wednesday,
July 24, 13
Easy Redeployment Reinstall exactly the same set of modules on
another prod/development machines. Wednesday, July 24, 13
Conservative Update Modules won't be upgraded unless it is required,
or manually updated. Wednesday, July 24, 13
Single-file, VCS friendly You can add cpanfile.snapshot to git update
whenever you update modules "Dependencies are part of your app." Wednesday, July 24, 13
Safe and easy rollback revert the lock file and redeploy
Wednesday, July 24, 13
DEMO Wednesday, July 24, 13
Deployment with Carton Wednesday, July 24, 13
@local> carton install @local> git commit cpanfile.snapshot @local> git push
@remote> carton install -‐-‐deployment @remote> carton exec plackup ... Wednesday, July 24, 13
Example: github.com/miyagawa/cpanmetadb-perl capistrano, Server::Starter, carton, plackup (twiggy) Wednesday, July 24,
13
PaaS/Cloud github.com/miyagawa/heroku-buildpack-perl Wednesday, July 24, 13
Wednesday, July 24, 13
http://weblog.bulknews.net Wednesday, July 24, 13
Support to come! Dokku, DotCloud, Travis CI, Cloud Foundry etc.
Wednesday, July 24, 13
carton 1.0 later this week Wednesday, July 24, 13
> cpanm -‐-‐dev Carton Wednesday, July 24, 13
Towards 1.1 • Inject patched versions (DarkPAN) • Install from
github • bootstrap with fatpack Wednesday, July 24, 13
github.com/miyagawa/carton irc.perl.org #carton Wednesday, July 24, 13
speakerdeck.com /miyagawa Wednesday, July 24, 13
Questions? Wednesday, July 24, 13