Setting up a development environment
Before we can start developing an application, we need to set up a development environment. This will hold all of the files our application needs.
For this small project, setting up our environment is pretty easy: We just need to create a new directory, any directory. Whenever we create a new file, we will put it in this directory.
Install Libraries with Carton
Our application is going to involve some libraries. We could install those
libraries using cpan
, but that would put the libraries in global places and
may interfere with our system. We could use
local::lib to install our modules, but
it'd be nice if we had an easy way to install our modules when we deploy our
app.
For this, we have Carton. We can install
Carton once globally (cpan Carton
) and then use Carton to manage our
dependencies. The carton install
command will install our dependencies to a
directory, local
, and then we use carton exec
to execute commands with our
dependencies.
We define our dependencies in a cpanfile
. We will need
Mojolicious,
Yancy, and
Mojo::Pg. Since we're making
recurring events, we'll also need to pull in the
DateTime and
DateTime::Event::Recurrence
modules.
Create a new file in your application directory named "cpanfile", then add the following:
requires 'Mojolicious', '7';
requires 'Mojolicious::Plugin::Yancy', '1';
requires 'Mojo::Pg', '4';
requires 'DateTime';
requires 'DateTime::Event::Recurrence';
This says we want to use Mojolicious version 7 or higher, Mojolicious::Plugin::Yancy (the plugin for the Yancy CMS) version 1 or higher, Mojo::Pg version 4 or higher, and any version of DateTime and DateTime::Event::Recurrence.
With our cpanfile
written, we install them with carton install
.
$ carton install
Installing modules using /Users/doug/perl/didio/cpanfile
Successfully installed ExtUtils-Config-0.008
Successfully installed ExtUtils-InstallPaths-0.011
Successfully installed ExtUtils-Helpers-0.026
Successfully installed Module-Build-Tiny-0.039
Successfully installed File-ShareDir-Install-0.11
Successfully installed Mojolicious-7.60
Successfully installed JSON-Validator-1.08
Successfully installed Mojolicious-Plugin-OpenAPI-1.23
Successfully installed Yancy-0.015
...
Carton reports on every distribution that it installs as it goes. Notice that we have a lot of modules we didn't define. These are the dependencies of our dependencies, and Carton installs them, too.
Carton installs everything to the local
directory. To see the modules
in this directory, we can run the carton exec
command. For example, to
read the documentation for Mojolicious, we can run carton exec perldoc
Mojolicious
.