carton cpan dependency manager
DESCRIPTION
TRANSCRIPT
CartonTatsuhiko Miyagawa
YAPC::Asia 2011 Tokyo
Friday, October 14, 2011
Managing CPAN Dependencies
Friday, October 14, 2011
Case Study:(Poor) Web Development
Friday, October 14, 2011
You’re writing a new web app.You don’t wanna reinvent wheels.Want to use as many CPAN deps.
Friday, October 14, 2011
Fine.Get them from CPAN,install on your machine.
Friday, October 14, 2011
> cpanm Web::Frameworkinstalled LWP-‐5.912installed Plack-‐0.9980installed Web-‐Framework-‐1.20> cpanm JSON::Fastinstalled JSON-‐Fast-‐1.91> cpanm MIME::Parser::XSinstalled MIME-‐Parser-‐XS-‐0.20
Friday, October 14, 2011
Test it...
Friday, October 14, 2011
Works? Ship it!
Friday, October 14, 2011
DeploymentSet up new production servers.
Install CPAN modules(until the errors are gone)
Friday, October 14, 2011
Few weeks later...
Friday, October 14, 2011
Your website is popular!Need more web servers!
Friday, October 14, 2011
Re-DeploymentSet up new production servers.
Install CPAN modules(until the errors are gone)
Friday, October 14, 2011
“Crap, Web::Framework has been updated to 1.4 and many APIs
have been changed or deprecated!”
Friday, October 14, 2011
RollbackLog in to the old web server.Check Perl module versions.
Install them on the new server.
Friday, October 14, 2011
“Crap, this author deletedthe version 1.20 we want.
Let’s go to BackPAN...”
Friday, October 14, 2011
“Crap, version 1.20 doesn’t actually work with the newer LWP 6 that we just
installed! Have to downgrade this too...”
Friday, October 14, 2011
and so on.
Friday, October 14, 2011
What was wrong?
Friday, October 14, 2011
• Dependency declaration
• Isolated Perl environments
• Version controls/history
• Dependency analysis
• Repeatable deployments
• etc.
Friday, October 14, 2011
Many existing solutionsMyCPAN, DPAN, CPAN::Mini::Inject,
OrePAN, Shipwright
Friday, October 14, 2011
None of thosedidn’t quite work for me.
(Or I haven’t even tried)
Friday, October 14, 2011
So I wrote a new one.
Friday, October 14, 2011
Cartonhttps://github.com/miyagawa/carton
Friday, October 14, 2011
Inspired by...
Friday, October 14, 2011
Friday, October 14, 2011
• App-specific local environment
• Fast and safe install
• Dep-tree analysis, including versions
• Locking module versions
• Easy Redeployment
• Single-file, VCS friendly
• Safe and easy rollback
Friday, October 14, 2011
Local perl environmentUsing local::lib and cpanm -L
Each app has an isolated local library path
Friday, October 14, 2011
Fast and safe installcpanm 1.5
Saves MYMETA.json and install meta info
Friday, October 14, 2011
Dep tree analysisRebuild the dependency tree from meta info
Checks if anything is missing/superflous
Friday, October 14, 2011
Locking versionsVersions are saved in carton.lock
including dependencies
Friday, October 14, 2011
Easy RedeploymentReinstall exactly the same set of moduleson another prod/development machines.
Friday, October 14, 2011
Single-file, VCS friendlyYou can add carton.lock to git
update whenever you update modules
Friday, October 14, 2011
Safe and easy rollbackrevert the lock file and redeploy
Friday, October 14, 2011
DEMO
Friday, October 14, 2011
> cpanm Carton
Friday, October 14, 2011
WARNINGIt is beta software, some features are
missing or not working correctly (yet).
Friday, October 14, 2011
github.com/miyagawa/cartonirc.perl.org #carton
Friday, October 14, 2011
Questions?
Friday, October 14, 2011
Thanks!twitter.com/miyagawa
Friday, October 14, 2011