GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
DBIx::Class::DeploymentHandler::Manual::CatalystIntro(3) User Contributed Perl Documentation DBIx::Class::DeploymentHandler::Manual::CatalystIntro(3)

DBIx::Class::DeploymentHandler::Manual::CatalystIntro - Introduction to using DBIx::Class::DeploymentHandler with a new Catalyst Project

This introduction will use PostgreSQL and Catalyst. Background information on using PostgreSQL with Catalyst can be found at Catalyst::Manual::Tutorial::10_Appendices. This guide will assume that you have some understanding of Catalyst. Please go through the Catalyst tutorials first if you have not yet done so.

Start by creating a user "catalyst", with password "catalyst"

 $ sudo -u postgres createuser -P catalyst
 Enter password for new role: <catalyst>
 Enter it again: <catalyst>
 Shall the new role be a superuser? (y/n) n
 Shall the new role be allowed to create databases? (y/n) n
 Shall the new role be allowed to create more new roles? (y/n) n

Then create a new database called "deploymentintro"

 sudo -u postgres createdb -O catalyst deploymentintro

 $ catalyst.pl DeploymentIntro
 $ cd DeploymentIntro
 $ perl Makefile.PL

 $ script/deploymentintro_create.pl model DB DBIC::Schema DeploymentIntro::Schema \
     create=static 'dbi:Pg:dbname=deploymentintro' 'catalyst' 'catalyst' '{ AutoCommit => 1 }'

 $ mkdir -p lib/Schema/Result

Remove the following from "lib/DeploymentIntro/Model/DB.pm":

 connect_info => {
   dsn => 'dbi:Pg:dbname=deploymentintro',
   user => 'catalyst',
   password => 'catalyst',
   AutoCommit => q{1},
 }

Remove "deploymentintro.conf" and create a new file called "deploymentintro_local.pl" with the following:

    {
        name => "DeploymentIntro",

        "Model::DB" => {
            schema_class => 'DeploymentIntro::Schema',

            connect_info => {
                dsn        => 'dbi:Pg:dbname=deploymentintro',
                user       => 'catalyst',
                password   => 'catalyst',
                AutoCommit => 1,
            }
        }
    }

Copy the following program into scripts, under the name "deploymentintro_dbicdh.pl"

 #!/usr/bin/env perl

 use strict;
 use warnings;

 use feature ":5.10";

 use aliased 'DBIx::Class::DeploymentHandler' => 'DH';
 use FindBin;
 use lib "$FindBin::Bin/../lib";
 use DeploymentIntro::Schema;
 use Config::JFDI;

 my $config = Config::JFDI->new( name => 'DeploymentIntro' );
 my $config_hash  = $config->get;
 my $connect_info = $config_hash->{"Model::DB"}{"connect_info"};
 my $schema       = DeploymentIntro::Schema->connect($connect_info);

 my $dh = DH->new({
   schema           => $schema,
   script_directory => "$FindBin::Bin/../dbicdh",
   databases        => 'PostgreSQL',
 });

 sub install {
   $dh->prepare_install;
   $dh->install;
 }

 sub upgrade {
   die "Please update the version in Schema.pm"
     if ( $dh->version_storage->version_rs->search({version => $dh->schema_version})->count );

   die "We only support positive integers for versions around these parts."
     unless $dh->schema_version =~ /^\d+$/;

   $dh->prepare_deploy;
   $dh->prepare_upgrade;
   $dh->upgrade;
 }

 sub current_version {
   say $dh->database_version;
 }

 sub help {
 say <<'OUT';
 usage:
   install
   upgrade
   current-version
 OUT
 }

 help unless $ARGV[0];

 given ( $ARGV[0] ) {
     when ('install')         { install()         }
     when ('upgrade')         { upgrade()         }
     when ('current-version') { current_version() }
 }

Copy the following files into "lib/DeploymentIntro/Schema/Result":

"Cd.pm"

 package DeploymentIntro::Schema::Result::Cd;

 use strict;
 use warnings;

 use parent 'DBIx::Class::Core';

 __PACKAGE__->load_components(qw(InflateColumn::DateTime));
 __PACKAGE__->table('cd');

 __PACKAGE__->add_columns(
   id => {
     data_type => 'integer',
     is_auto_increment => 1,
   },
   artist_id => {
     data_type => 'integer'
   },
   title => {
     data_type => 'text'
   },
 );

 __PACKAGE__->set_primary_key('id');

 __PACKAGE__->belongs_to(
   artist => 'DeploymentIntro::Schema::Result::Artist', 'artist_id' );

 __PACKAGE__->has_many(
   tracks => 'DeploymentIntro::Schema::Result::Track', 'cd_id' );

 1;

"Artist.pm"

 package DeploymentIntro::Schema::Result::Artist;

 use strict;
 use warnings;

 use parent 'DBIx::Class::Core';

 __PACKAGE__->table('artist');

 __PACKAGE__->add_columns(
   id => {
     data_type => 'integer',
     is_auto_increment => 1,
   },
   name => {
     data_type => 'text'
   },
 );

 __PACKAGE__->set_primary_key('id');

 __PACKAGE__->has_many(
   cds => 'DeploymentIntro::Schema::Result::Cd', 'artist_id' );

 1;

"Track.pm"

 package DeploymentIntro::Schema::Result::Track;

 use strict;
 use warnings;

 use parent 'DBIx::Class::Core';

 __PACKAGE__->table('track');

 __PACKAGE__->add_columns(
   id => {
     data_type => 'integer',
     is_auto_increment => 1,
   },
   cd_id => {
     data_type => 'integer',
   },
   title => {
     data_type => 'text',
   }
 );

 __PACKAGE__->set_primary_key('id');

 __PACKAGE__->belongs_to(
   cd => 'DeploymentIntro::Schema::Result::Cd', 'cd_id' );

 1;

And then edit "lib/DeploymentIntro/Schema.pm" and add the following above the 1 at the bottom

 our $VERSION = 1;

Now it is just a matter of running

 ./script/deploymentintro_dbicdh.pl install

Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>

This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

2019-09-25 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.