1 package DBIx::Class::DeploymentHandler::Manual::CatalystIntro
3 # ABSTRACT: Introduction to using DBIx::Class::DeploymentHandler with a new Catalyst Project
9 This introduction will use PostgreSQL and L<Catalyst>. Background
10 information on using PostgreSQL with Catalyst can be found at
11 L<Catalyst::Manual::Tutorial::10_Appendices>. This guide will assume that
12 you have some understanding of Catalyst. Please go through the Catalyst
13 tutorials first if you have not yet done so.
17 Start by creating a user C<catalyst>, with password C<catalyst>
19 $ sudo -u postgres createuser -P catalyst
20 Enter password for new role: <catalyst>
21 Enter it again: <catalyst>
22 Shall the new role be a superuser? (y/n) n
23 Shall the new role be allowed to create databases? (y/n) n
24 Shall the new role be allowed to create more new roles? (y/n) n
26 Then create a new database called C<deploymentintro>
28 sudo -u postgres createdb -O catalyst deploymentintro
30 =head1 Create the project
32 $ catalyst.pl DeploymentIntro
36 =head1 Create the Schema
38 $ script/deploymentintro_create.pl model DB DBIC::Schema DeploymentIntro::Schema \
39 create=static 'dbi:Pg:dbname=deploymentintro' 'catalyst' 'catalyst' '{ AutoCommit => 1 }'
41 $ mkdir -p lib/Schema/Result
43 Remove the following from C<lib/DeploymentIntro/Model/DB.pm>:
46 dsn => 'dbi:Pg:dbname=deploymentintro',
48 password => 'catalyst',
52 Remove C<deploymentintro.conf> and create a new file called
53 C<deploymentintro_local.pl> with the following:
56 name => "DeploymentIntro",
59 schema_class => 'DeploymentIntro::Schema',
62 dsn => 'dbi:Pg:dbname=deploymentintro',
64 password => 'catalyst',
70 Copy the following program into scripts, under the name
71 C<deploymentintro_dbicdh.pl>
80 use aliased 'DBIx::Class::DeploymentHandler' => 'DH';
82 use lib "$FindBin::Bin/../lib";
83 use DeploymentIntro::Schema;
86 my $config = Config::JFDI->new( name => 'DeploymentIntro' );
87 my $config_hash = $config->get;
88 my $connect_info = $config_hash->{"Model::DB"}{"connect_info"};
89 my $schema = DeploymentIntro::Schema->connect($connect_info);
93 script_directory => "$FindBin::Bin/../dbicdh",
94 databases => 'PostgreSQL',
103 die "Please set the version in Schema.pm"
104 unless $dh->schema->schema_version;
105 die "Please update the version in Schema.pm"
106 if ( $dh->version_storage->version_rs->search({version => $dh->schema_version})->count );
107 die "We only support positive integers for versions around these parts."
108 unless $dh->schema_version =~ /^\d+$/;
111 $dh->prepare_upgrade;
115 sub current_version {
116 say $dh->database_version;
128 help unless $ARGV[0];
131 when ('install') { install() }
132 when ('upgrade') { upgrade() }
133 when ('current-version') { current_version() }
136 Copy the following files into C<lib/DeploymentIntro/Schema/Result>:
140 package DeploymentIntro::Schema::Result::Cd;
145 use parent 'DBIx::Class::Core';
147 __PACKAGE__->load_components(qw(InflateColumn::DateTime));
148 __PACKAGE__->table('cd');
150 __PACKAGE__->add_columns(
152 data_type => 'integer',
153 is_auto_increment => 1,
156 data_type => 'integer'
163 __PACKAGE__->set_primary_key('id');
165 __PACKAGE__->belongs_to(
166 artist => 'DeploymentIntro::Schema::Result::Artist', 'artist_id' );
168 __PACKAGE__->has_many(
169 tracks => 'DeploymentIntro::Schema::Result::Track', 'cd_id' );
176 package DeploymentIntro::Schema::Result::Artist;
181 use parent 'DBIx::Class::Core';
183 __PACKAGE__->table('artist');
185 __PACKAGE__->add_columns(
187 data_type => 'integer',
188 is_auto_increment => 1,
195 __PACKAGE__->set_primary_key('id');
197 __PACKAGE__->has_many(
198 cds => 'DeploymentIntro::Schema::Result::Cd', 'artist_id' );
205 package DeploymentIntro::Schema::Result::Track;
210 use parent 'DBIx::Class::Core';
212 __PACKAGE__->table('track');
214 __PACKAGE__->add_columns(
216 data_type => 'integer',
217 is_auto_increment => 1,
220 data_type => 'integer',
227 __PACKAGE__->set_primary_key('id');
229 __PACKAGE__->belongs_to(
230 cd => 'DeploymentIntro::Schema::Result::Cd', 'cd_id' );
235 And then edit C<lib/DeploymentIntro/Schema.pm> and add the following above the
240 Now it is just a matter of running
242 ./script/deploymentintro_dbicdh.pl install