Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

carton-install(1p) [debian man page]

CARTON-INSTALL(1p)					User Contributed Perl Documentation					CARTON-INSTALL(1p)

NAME
carton-install - Install the dependencies SYNOPSIS
carton install [--deployment] [--path=PATH] [modules...] DESCRIPTION
Install the dependencies for your application. This command has two modes and the behavior is slightly different. DEVELOPMENT MODE carton install (no arguments) If you run "carton install" without any arguments and if cpanfile exists, carton will scan dependencies from cpanfile and install the modules. In either way, if you run "carton install" for the first time (i.e. carton.lock does not exist), carton will fetch all the modules specified, resolve dependencies and install all required modules from CPAN. If carton.lock file does exist, carton will still try to install modules specified or updated in cpanfile, but uses carton.lock for the dependency resolution, and then cascades to CPAN. carton will analyze all the dependencies and their version information, and it is saved into carton.lock file. It is important to add carton.lock file into a version controlled repository and commit the changes as you update your dependencies. DEPLOYMENT MODE If you specify the "--deployment" command line option or the carton.lock exists and cpanfile does not exist, carton will fetch all remote modules and use the dependencies specified in the carton.lock instead of resolving dependencies. CONSERVATIVE UPDATE
"carton install" doesn't update the modules already installed into local library path as long as the version is satisfied. For example, one day you install URI-1.50 from CPAN: > carton install URI Successfully installed URI-1.50 Few weeks later, URI module is updated to 1.51 on CPAN. If you run the "carton install URI" again: > carton install URI You have URI (1.50) because you haven't specified the version number, carton won't update the module in your local library path. WARNINGS: following commands are not implemented If you want to update to the latest version of CPAN, you can either use "carton update" command, or specify the required version either in your cpanfile. > carton update URI > cat cpanfile requires 'URI', 1.51; Any of those will upgrade URI to the latest one from CPAN, and the version specified in the carton.lock will be bumped. OPTIONS
--deployment Force the deployment mode and carton will ignore cpanfile contents. --path Specify the path to install modules to. Defaults to local in the current directory. perl v5.14.2 2012-05-12 CARTON-INSTALL(1p)

Check Out this Related Man Page

CARTON-FAQ(1p)						User Contributed Perl Documentation					    CARTON-FAQ(1p)

NAME
carton-faq - Frequently Asked Questions QUESTIONS
It looks useful, but what is the use case of this tool? The particular problem that carton is trying to address is this: You develop a Perl web application with dozens of CPAN module dependencies. You install these modules on your development machine, and describe these dependencies in your Makefile.PL or some other text format. Now you get a produciton environment on Cloud PaaS provider or some VPS, you install the dependencies using "cpanm --installdeps ." and it will pull all the latest releases from CPAN as of today and everything just works. A few weeks later, your application becomes more popular, and you think you need another machine to serve more requests. You set up another machine with vanilla perl installation and install the dependencies the same way. That will pull the latest releases from CPAN on that date, rather than the same as what you have today. And that is the problem. It's not likely that everything just breaks one day, but there's always a chance that one of the dependencies breaks an API compatibility, or just uploaded a buggy version to CPAN on that particular day. Carton allows you to lock these dependencies into a version controlled system, so that every time you deploy from a checkout, it is guaranteed that all the same versions are installed into the local environment. How is this different from DPAN or CPAN::Mini::Inject? First of all, if you currently use DPAN, CPAN::Mini::Inject, Shipwright or any other similar tools successfully, then that's totally fine. You don't need to switch to carton. If you experience difficulties with these tools, or are interested in what could be better in carton, keep on reading. carton definitely shares the goal with these private CPAN repository management tool: o Manage the dependencies tree locally o Take snapshots/lock the versions o Inject private modules into the repository Existing tools are designed to work with existing CPAN clients such as CPAN or CPANPLUS, and have accomplished that by working around the CPAN mirror structure. carton internally does the same thing, but its user interface is centerd around the installer, by implementing a wrapper for cpanm, so you can use the same commands in the development mode and deployment mode. Carton automatically maintains the carton.lock file, which is meant to be version controlled, inside your application directory. You don't need a separate database or a directory to maintain tarballs outside your application. The carton.lock file can always be generated out of the local library path, and carton can reproduce the tree using the lock file on other machines. I'm already using perlbrew and local::lib. Can I use carton with this? If you're using local::lib already with perlbrew perl, possibly with the new "perlbrew lib" command, that's great! There are multiple benefits over using perlbrew and local::lib for development and use Carton for deployment. The best practice and workflow to get your perl environment as clean as possible with lots of modules installed for quick development would be this: o Install fresh perl using perlbrew. The version should be the same against the version you'll run on the production environment (if any). o Once the installation is done, use "perlbrew lib" command to create a new local lib environment (let's call it devel) and always use the library as a default environment. Install as many modules as you would like into the devel library path. This ensures to have a vanilla "perl" library path as clean as possible. o When you build a new project that you want to manage dependencies via Carton, turn off the devel local::lib and create a new one, like carton. Install Carton and all of its dependencies to the carton local::lib path. Then run "carton install" like you normally do. Because devel and carton are isolated, the modules you installed into devel doesn't affect the process when carton builds the dependency tree for your new project at all. This could often be critical when you have a conditional dependency in your tree, like Any::Moose. perl v5.14.2 2012-05-18 CARTON-FAQ(1p)
Man Page