# ABSTRACT: Introduction to using DBIx::Class::DeploymentHandler with a new Catalyst Project
-
-__END__
=pod
-=head1 NAME
-
-DBIx::Class::DeploymentHandler::Manual::CatalystIntro - Introduction to using DBIx::Class::DeploymentHandler with a new Catalyst Project
-
=head1 Background
-This introduction will use PostgreSQL and Catalyst. Background information on using PostgreSQL with Catalyst can be found at L<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.
+This introduction will use PostgreSQL and L<Catalyst>. Background
+information on using PostgreSQL with Catalyst can be found at
+L<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.
=head1 Database Setup
-Start by creating a user catalyst, with password catalyst
+Start by creating a user C<catalyst>, with password C<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
+ $ 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, deploymentintro
+Then create a new database called C<deploymentintro>
- sudo -u postgres createdb -O catalyst deploymentintro
+ sudo -u postgres createdb -O catalyst deploymentintro
=head1 Create the project
- $ catalyst.pl DeploymentIntro
- $ cd DeploymentIntro
- $ perl Makefile.PL
+ $ catalyst.pl DeploymentIntro
+ $ cd DeploymentIntro
+ $ perl Makefile.PL
=head1 Create the Schema
- $ script/deploymentintro_create.pl model DB DBIC::Schema DeploymentIntro::Schema \
- create=static 'dbi:Pg:dbname=deploymentintro' 'catalyst' 'catalyst' '{ AutoCommit => 1 }'
+ $ script/deploymentintro_create.pl model DB DBIC::Schema DeploymentIntro::Schema \
+ create=static 'dbi:Pg:dbname=deploymentintro' 'catalyst' 'catalyst' '{ AutoCommit => 1 }'
- $ mkdir lib/Schema
- $ mkdir lib/Schema/Result
+ $ mkdir -p lib/Schema/Result
-Edit out the following from lib/DeploymentIntro/Model/DB.pm:
+Remove the following from C<lib/DeploymentIntro/Model/DB.pm>:
- __PACKAGE__->config(
- schema_class => 'DeploymentIntro::Schema',
-
- connect_info => {
- dsn => 'dbi:Pg:dbname=deploymentintro',
- user => 'catalyst',
- password => 'catalyst',
- AutoCommit => q{1},
- }
- );
+ connect_info => {
+ dsn => 'dbi:Pg:dbname=deploymentintro',
+ user => 'catalyst',
+ password => 'catalyst',
+ AutoCommit => q{1},
+ }
-Remove deploymentintro.conf and create a new file, deploymentintro_local.pl with the following:
+Remove C<deploymentintro.conf> and create a new file called
+C<deploymentintro_local.pl> with the following:
{
name => "DeploymentIntro",
dsn => 'dbi:Pg:dbname=deploymentintro',
user => 'catalyst',
password => 'catalyst',
- AutoCommit => q{1},
+ 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',
- }
- );
+Copy the following program into scripts, under the name
+C<deploymentintro_dbicdh.pl>
- sub install {
- $dh->prepare_install;
- $dh->install;
- }
+ #!/usr/bin/env perl
- sub upgrade {
- die "Please set the version in Schema.pm"
- unless $dh->schema->schema_version;
- 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;
- }
+ use strict;
+ use warnings;
- sub current_version {
- print $dh->database_version. "\n";
- }
+ use feature ":5.10";
- sub help {
+ use aliased 'DBIx::Class::DeploymentHandler' => 'DH';
+ use FindBin;
+ use lib "$FindBin::Bin/../lib";
+ use DeploymentIntro::Schema;
+ use Config::JFDI;
- print qq/
- usage:
- install
- upgrade
- upgrade-to [version]
- downgrade-to [version]
- current-version
- /;
+ 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',
+ });
- help unless $ARGV[0];
+ sub install {
+ $dh->prepare_install;
+ $dh->install;
+ }
- given ( $ARGV[0] ) {
- when ("install") { install(); }
- when ("upgrade") { upgrade(); }
- when ("current-version") { current_version(); }
- }
+ sub upgrade {
+ die "Please set the version in Schema.pm"
+ unless $dh->schema->schema_version;
+ 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 C<lib/DeploymentIntro/Schema/Result>:
+
+C<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;
+
+
+C<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'
+ },
+ );
-Copy the following files into lib/DeploymentIntro/Schema/Result
+ __PACKAGE__->set_primary_key('id');
-Cd.pm
+ __PACKAGE__->has_many(
+ cds => 'DeploymentIntro::Schema::Result::Cd', 'artist_id' );
- package DeploymentIntro::Schema::Result::Cd;
- use base qw/DBIx::Class::Core/;
- __PACKAGE__->load_components(qw/InflateColumn::DateTime/);
- __PACKAGE__->table('cd');
- __PACKAGE__->add_columns(
- 'cdid', { data_type => 'integer' },
- 'artist', { data_type => 'integer' },
- 'title', { data_type => 'text' }
- );
- __PACKAGE__->set_primary_key('cdid');
- __PACKAGE__->belongs_to(
- 'artist' => 'DeploymentIntro::Schema::Result::Artist' );
- __PACKAGE__->has_many( 'tracks' => 'DeploymentIntro::Schema::Result::Track' );
+ 1;
- 1;
+C<Track.pm>
-Artist.pm
+ package DeploymentIntro::Schema::Result::Track;
- package DeploymentIntro::Schema::Result::Artist;
- use base qw/DBIx::Class::Core/;
- __PACKAGE__->table('artist');
- __PACKAGE__->add_columns(
- 'artistid', { data_type => 'integer' },
- 'name', { data_type => 'text' }
- );
- __PACKAGE__->set_primary_key('artistid');
- __PACKAGE__->has_many( 'cds' => 'DeploymentIntro::Schema::Result::Cd' );
+ use strict;
+ use warnings;
- 1;
+ use parent 'DBIx::Class::Core';
+ __PACKAGE__->table('track');
-Track.pm
+ __PACKAGE__->add_columns(
+ id => {
+ data_type => 'integer',
+ is_auto_increment => 1,
+ },
+ cd_id => {
+ data_type => 'integer',
+ },
+ title => {
+ data_type => 'text',
+ }
+ );
- package DeploymentIntro::Schema::Result::Track;
- use base qw/DBIx::Class::Core/;
- __PACKAGE__->table('track');
- __PACKAGE__->add_columns(
- 'trackid', { data_type => 'integer' },
- 'cd', { data_type => 'integer' },
- 'title', { data_type => 'text' }
- );
- __PACKAGE__->set_primary_key('trackid');
- __PACKAGE__->belongs_to( 'cd' => 'DeploymentIntro::Schema::Result::Cd' );
+ __PACKAGE__->set_primary_key('id');
- 1;
+ __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
- use vars qw($VERSION);
- $VERSION = "1";
+And then edit C<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
+ ./script/deploymentintro_dbicdh.pl install