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
Managing CPAN dependencies with Carton
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Tatsuhiko Miyagawa
November 23, 2013
Technology
0
370
Managing CPAN dependencies with Carton
at Nordic Perl Workshop 2013
Tatsuhiko Miyagawa
November 23, 2013
Tweet
Share
More Decks by Tatsuhiko Miyagawa
See All by Tatsuhiko Miyagawa
Carmel at YAPC::EU 2015
miyagawa
0
570
Carton at London Perl Workshop 2013
miyagawa
0
310
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.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
230
Plack 1.0 announcement at OSCON
miyagawa
1
300
Other Decks in Technology
See All in Technology
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
410
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
780
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.6k
今日から始めるAmazon Bedrock AgentCore
har1101
4
420
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
340
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
200
Red Hat OpenStack Services on OpenShift
tamemiya
0
140
22nd ACRi Webinar - 1Finity Tamura-san's slide
nao_sumikawa
0
110
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
230
Tebiki Engineering Team Deck
tebiki
0
24k
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.6k
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
2.3M
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
100
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
200
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
The Curse of the Amulet
leimatthew05
1
8.7k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
57
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
240
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
120
Paper Plane
katiecoart
PRO
0
46k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
750
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
300
Transcript
Carton managing CPAN dependencies Tatsuhiko Miyagawa @miyagawa Nordic Perl Workshop
2013 Saturday, November 23, 13
Me • Tatsuhiko Miyagawa • Lives in San Francisco •
{github,twitter,CPAN}/miyagawa Saturday, November 23, 13
Thank You! Saturday, November 23, 13
Managing CPAN Dependencies Saturday, November 23, 13
How many CPAN modules your app depends on? Saturday, November
23, 13
When is the last time upgrading a CPAN module broke
your app? Saturday, November 23, 13
Case Study: Web App Development Saturday, November 23, 13
You’re writing a new web app using as many CPAN
modules. Saturday, November 23, 13
Get them from CPAN, install on your machine. Saturday, November
23, 13
john@local> cpanm Web::Framework installed LWP-‐5.912 installed Plack-‐0.9980 installed Web-‐Framework-‐1.10 Saturday,
November 23, 13
Test it... Saturday, November 23, 13
Works? Ship it! Saturday, November 23, 13
What if ... Saturday, November 23, 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 23, 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 23, 13
root@prod> cpanm Web::Framework installed LWP-‐5.912 installed Plack-‐0.9980 installed Web-‐Framework-‐1.20 Saturday,
November 23, 13
Web::Framework 1.2 API changes! Saturday, November 23, 13
Saturday, November 23, 13
Saturday, November 23, 13
“Upgrading CPAN modules broke my app” Saturday, November 23, 13
Dependencies are part of your app. Saturday, November 23, 13
a solution cpanm 1.6 Saturday, November 23, 13
> cpanm Web::
[email protected]
installed Web-‐Framework-‐1.10 Saturday, November 23, 13
> cpanm Web::Framework~">= 1.0, < 1.2" installed Web-‐Framework-‐1.19 Saturday, November
23, 13
♥ MetaCPAN Saturday, November 23, 13
a solution cpanfile + cpanm 1.6 Saturday, November 23, 13
> cat cpanfile requires 'Web::Framework', '== 1.10'; > cpanm -‐-‐installdeps
. installed Web-‐Framework-‐1.10 Saturday, November 23, 13
cpanfile DSL to describe prereqs Saturday, November 23, 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 23, 13
inspired by: gemfile(5) Saturday, November 23, 13
Compatible to: Module::Install(::DSL) Saturday, November 23, 13
Converted to: CPAN::Meta::Prereqs Saturday, November 23, 13
Toolset Module::CPANfile Module::Install::CPANfile Dist::Zilla plugins Saturday, November 23, 13
Supported by dzil, Milla & cpanm 1.6 Saturday, November 23,
13
cpanfile + cpanm • Simple • Yet powerful and flexible
way to describe dependencies and version requirements • Version control cpanfile Saturday, November 23, 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 Saturday, November 23, 13
Many other solutions Needs servers, Needs databases Too simple, Too
complicated, etc. Saturday, November 23, 13
the new Solution Saturday, November 23, 13
Carton https://github.com/miyagawa/carton Saturday, November 23, 13
Inspired by... Saturday, November 23, 13
Saturday, November 23, 13
Basic idea: Describe CPAN dependencies snapshot tarball pathnames Saturday, November
23, 13
Built on top of: cpanfile + cpanm 1.7 Saturday, November
23, 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 23, 13
Local perl environment Using local::lib and cpanm -L Each app
has an isolated local library path Saturday, November 23, 13
Fast and safe install Saves MYMETA.json and install meta info
Saturday, November 23, 13
Dep tree analysis Rebuild the dependency tree from snapshot Checks
if anything is missing/superfluous Saturday, November 23, 13
Freezing versions Versions are saved in snapshots including dependencies Saturday,
November 23, 13
Easy Redeployment Reinstall exactly the same set of modules on
another prod/development machines. Saturday, November 23, 13
Conservative Update Modules won't be upgraded unless it is required,
or manually updated. Saturday, November 23, 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 23, 13
Safe and easy rollback revert the lock file and redeploy
Saturday, November 23, 13
DEMO Saturday, November 23, 13
Deployment with Carton Saturday, November 23, 13
@local> carton install @local> git commit cpanfile.snapshot @local> git push
@remote> carton install -‐-‐deployment @remote> carton exec plackup ... Saturday, November 23, 13
Example: github.com/miyagawa/cpanmetadb-perl capistrano, Server::Starter, carton, plackup (twiggy) Saturday, November 23,
13
PaaS/Cloud github.com/miyagawa/heroku-buildpack-perl Saturday, November 23, 13
Saturday, November 23, 13
http://weblog.bulknews.net Saturday, November 23, 13
Support to come! Dokku, DotCloud, Travis CI, Cloud Foundry etc.
Saturday, November 23, 13
carton 1.0 on CPAN Saturday, November 23, 13
> cpanm Carton Saturday, November 23, 13
Preview: next major releases Saturday, November 23, 13
cpanm 1.8 git (+ any URL) support in index Saturday,
November 23, 13
cpanfile 1.1 git syntax support Saturday, November 23, 13
requires 'Plack', '1.0000', git => 'git://github.com/plack/Plack.git', ref =>
'devel'; carton 1.1 Saturday, November 23, 13
requires 'Plack', '1.0011', dist => 'MIYAGAWA/Plack-‐1.0011.tar.gz'; carton 1.1 Saturday,
November 23, 13
requires 'Plack', '1.0011', dist => 'http://darkpan/Plack-‐1.tar.gz'; carton 1.1 Saturday,
November 23, 13
(demo) Saturday, November 23, 13
cpanm 1.8 • Rewrite internals • Backend API • Plugin
support • CPAN Testers support (via plugins) Saturday, November 23, 13
carton 1.1 • binstubs • configure args/hints support • safe
exec on development • remember options (--path etc.) Saturday, November 23, 13
github.com/miyagawa/carton irc.perl.org #carton Saturday, November 23, 13
speakerdeck.com /miyagawa Saturday, November 23, 13
gum.co/BmXz Saturday, November 23, 13
Questions? Saturday, November 23, 13