$30 off During Our Annual Pro Sale. View Details »

Carton CPAN dependency manager

Carton CPAN dependency manager

Tatsuhiko Miyagawa

October 14, 2011
Tweet

More Decks by Tatsuhiko Miyagawa

Other Decks in Technology

Transcript

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

    View Slide

  2. Managing CPAN
    Dependencies
    Friday, October 14, 2011

    View Slide

  3. Case Study:
    (Poor) Web Development
    Friday, October 14, 2011

    View Slide

  4. You’re writing a new web app.
    You don’t wanna reinvent wheels.
    Want to use as many CPAN deps.
    Friday, October 14, 2011

    View Slide

  5. Fine.
    Get them from CPAN,
    install on your machine.
    Friday, October 14, 2011

    View Slide

  6. >  cpanm  Web::Framework
    installed  LWP-­‐5.912
    installed  Plack-­‐0.9980
    installed  Web-­‐Framework-­‐1.20
    >  cpanm  JSON::Fast
    installed  JSON-­‐Fast-­‐1.91
    >  cpanm  MIME::Parser::XS
    installed  MIME-­‐Parser-­‐XS-­‐0.20
    Friday, October 14, 2011

    View Slide

  7. Test it...
    Friday, October 14, 2011

    View Slide

  8. Works? Ship it!
    Friday, October 14, 2011

    View Slide

  9. Deployment
    Set up new production servers.
    Install CPAN modules
    (until the errors are gone)
    Friday, October 14, 2011

    View Slide

  10. Few weeks later...
    Friday, October 14, 2011

    View Slide

  11. Your website is popular!
    Need more web servers!
    Friday, October 14, 2011

    View Slide

  12. Re-Deployment
    Set up new production servers.
    Install CPAN modules
    (until the errors are gone)
    Friday, October 14, 2011

    View Slide

  13. “Crap, Web::Framework has been
    updated to 1.4 and many APIs
    have been changed or deprecated!”
    Friday, October 14, 2011

    View Slide

  14. Rollback
    Log in to the old web server.
    Check Perl module versions.
    Install them on the new server.
    Friday, October 14, 2011

    View Slide

  15. “Crap, this author deleted
    the version 1.20 we want.
    Let’s go to BackPAN...”
    Friday, October 14, 2011

    View Slide

  16. “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

    View Slide

  17. and so on.
    Friday, October 14, 2011

    View Slide

  18. What was wrong?
    Friday, October 14, 2011

    View Slide

  19. • Dependency declaration
    • Isolated Perl environments
    • Version controls/history
    • Dependency analysis
    • Repeatable deployments
    • etc.
    Friday, October 14, 2011

    View Slide

  20. Many existing solutions
    MyCPAN, DPAN, CPAN::Mini::Inject,
    OrePAN, Shipwright
    Friday, October 14, 2011

    View Slide

  21. None of those
    didn’t quite work for me.
    (Or I haven’t even tried)
    Friday, October 14, 2011

    View Slide

  22. So I wrote a new one.
    Friday, October 14, 2011

    View Slide

  23. Carton
    https://github.com/miyagawa/carton
    Friday, October 14, 2011

    View Slide

  24. Inspired by...
    Friday, October 14, 2011

    View Slide

  25. Friday, October 14, 2011

    View Slide

  26. • 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

    View Slide

  27. Local perl environment
    Using local::lib and cpanm -L
    Each app has an isolated local library path
    Friday, October 14, 2011

    View Slide

  28. Fast and safe install
    cpanm 1.5
    Saves MYMETA.json and install meta info
    Friday, October 14, 2011

    View Slide

  29. Dep tree analysis
    Rebuild the dependency tree from meta info
    Checks if anything is missing/superflous
    Friday, October 14, 2011

    View Slide

  30. Locking versions
    Versions are saved in carton.lock
    including dependencies
    Friday, October 14, 2011

    View Slide

  31. Easy Redeployment
    Reinstall exactly the same set of modules
    on another prod/development machines.
    Friday, October 14, 2011

    View Slide

  32. Single-file, VCS friendly
    You can add carton.lock to git
    update whenever you update modules
    Friday, October 14, 2011

    View Slide

  33. Safe and easy rollback
    revert the lock file and redeploy
    Friday, October 14, 2011

    View Slide

  34. DEMO
    Friday, October 14, 2011

    View Slide

  35. >  cpanm  Carton
    Friday, October 14, 2011

    View Slide

  36. WARNING
    It is beta software, some features are
    missing or not working correctly (yet).
    Friday, October 14, 2011

    View Slide

  37. github.com/miyagawa/carton
    irc.perl.org #carton
    Friday, October 14, 2011

    View Slide

  38. Questions?
    Friday, October 14, 2011

    View Slide

  39. Thanks!
    twitter.com/miyagawa
    Friday, October 14, 2011

    View Slide