carton cpan dependency manager

39
Carton Tatsuhiko Miyagawa YAPC::Asia 2011 Tokyo Friday, October 14, 2011

Upload: tatsuhiko-miyagawa

Post on 15-Jan-2015

5.729 views

Category:

Technology


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Carton CPAN dependency manager

CartonTatsuhiko Miyagawa

YAPC::Asia 2011 Tokyo

Friday, October 14, 2011

Page 2: Carton CPAN dependency manager

Managing CPAN Dependencies

Friday, October 14, 2011

Page 3: Carton CPAN dependency manager

Case Study:(Poor) Web Development

Friday, October 14, 2011

Page 4: Carton CPAN dependency manager

You’re writing a new web app.You don’t wanna reinvent wheels.Want to use as many CPAN deps.

Friday, October 14, 2011

Page 5: Carton CPAN dependency manager

Fine.Get them from CPAN,install on your machine.

Friday, October 14, 2011

Page 6: Carton CPAN dependency manager

>  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

Page 7: Carton CPAN dependency manager

Test it...

Friday, October 14, 2011

Page 8: Carton CPAN dependency manager

Works? Ship it!

Friday, October 14, 2011

Page 9: Carton CPAN dependency manager

DeploymentSet up new production servers.

Install CPAN modules(until the errors are gone)

Friday, October 14, 2011

Page 10: Carton CPAN dependency manager

Few weeks later...

Friday, October 14, 2011

Page 11: Carton CPAN dependency manager

Your website is popular!Need more web servers!

Friday, October 14, 2011

Page 12: Carton CPAN dependency manager

Re-DeploymentSet up new production servers.

Install CPAN modules(until the errors are gone)

Friday, October 14, 2011

Page 13: Carton CPAN dependency manager

“Crap, Web::Framework has been updated to 1.4 and many APIs

have been changed or deprecated!”

Friday, October 14, 2011

Page 14: Carton CPAN dependency manager

RollbackLog in to the old web server.Check Perl module versions.

Install them on the new server.

Friday, October 14, 2011

Page 15: Carton CPAN dependency manager

“Crap, this author deletedthe version 1.20 we want.

Let’s go to BackPAN...”

Friday, October 14, 2011

Page 16: Carton CPAN dependency manager

“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

Page 17: Carton CPAN dependency manager

and so on.

Friday, October 14, 2011

Page 18: Carton CPAN dependency manager

What was wrong?

Friday, October 14, 2011

Page 19: Carton CPAN dependency manager

• Dependency declaration

• Isolated Perl environments

• Version controls/history

• Dependency analysis

• Repeatable deployments

• etc.

Friday, October 14, 2011

Page 20: Carton CPAN dependency manager

Many existing solutionsMyCPAN, DPAN, CPAN::Mini::Inject,

OrePAN, Shipwright

Friday, October 14, 2011

Page 21: Carton CPAN dependency manager

None of thosedidn’t quite work for me.

(Or I haven’t even tried)

Friday, October 14, 2011

Page 22: Carton CPAN dependency manager

So I wrote a new one.

Friday, October 14, 2011

Page 23: Carton CPAN dependency manager

Cartonhttps://github.com/miyagawa/carton

Friday, October 14, 2011

Page 24: Carton CPAN dependency manager

Inspired by...

Friday, October 14, 2011

Page 25: Carton CPAN dependency manager

Friday, October 14, 2011

Page 26: Carton CPAN dependency manager

• 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

Page 27: Carton CPAN dependency manager

Local perl environmentUsing local::lib and cpanm -L

Each app has an isolated local library path

Friday, October 14, 2011

Page 28: Carton CPAN dependency manager

Fast and safe installcpanm 1.5

Saves MYMETA.json and install meta info

Friday, October 14, 2011

Page 29: Carton CPAN dependency manager

Dep tree analysisRebuild the dependency tree from meta info

Checks if anything is missing/superflous

Friday, October 14, 2011

Page 30: Carton CPAN dependency manager

Locking versionsVersions are saved in carton.lock

including dependencies

Friday, October 14, 2011

Page 31: Carton CPAN dependency manager

Easy RedeploymentReinstall exactly the same set of moduleson another prod/development machines.

Friday, October 14, 2011

Page 32: Carton CPAN dependency manager

Single-file, VCS friendlyYou can add carton.lock to git

update whenever you update modules

Friday, October 14, 2011

Page 33: Carton CPAN dependency manager

Safe and easy rollbackrevert the lock file and redeploy

Friday, October 14, 2011

Page 34: Carton CPAN dependency manager

DEMO

Friday, October 14, 2011

Page 35: Carton CPAN dependency manager

>  cpanm  Carton

Friday, October 14, 2011

Page 36: Carton CPAN dependency manager

WARNINGIt is beta software, some features are

missing or not working correctly (yet).

Friday, October 14, 2011

Page 37: Carton CPAN dependency manager

github.com/miyagawa/cartonirc.perl.org #carton

Friday, October 14, 2011

Page 38: Carton CPAN dependency manager

Questions?

Friday, October 14, 2011

Page 39: Carton CPAN dependency manager

Thanks!twitter.com/miyagawa

Friday, October 14, 2011