Carton CPAN dependency manager

Preview:

DESCRIPTION

 

Citation preview

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

Recommended