application class. This can be hard-coded, or brought in from a
separate configuration file.
-=head3 Using YAML
+=head3 Using Config::General
-YAML is a method for creating flexible and readable configuration
-files. It's a great way to keep your Catalyst application
-configuration in one easy-to-understand location.
+L<Config::General|Config::General> is a method for creating flexible
+and readable configuration files. It's a great way to keep your
+Catalyst application configuration in one easy-to-understand location.
-In your application class (e.g. C<lib/MyApp.pm>):
+Now create C<myapp.conf> in your application home:
- use YAML;
- # application setup
- __PACKAGE__->config( YAML::LoadFile(__PACKAGE__->config->{'home'} . '/myapp.yml') );
- __PACKAGE__->setup;
-
-Now create C<myapp.yml> in your application home:
-
- --- #YAML:1.0
- # DO NOT USE TABS FOR INDENTATION OR label/value SEPARATION!!!
- name: MyApp
+ name MyApp
# session; perldoc Catalyst::Plugin::Session::FastMmap
- session:
- expires: '3600'
- rewrite: '0'
- storage: '/tmp/myapp.session'
+ <Session>
+ expires 3600
+ rewrite 0
+ storage /tmp/myapp.session
+ </Session>
# emails; perldoc Catalyst::Plugin::Email
# this passes options as an array :(
- email:
- - SMTP
- - localhost
+ Mail SMTP
+ Mail localhost
This is equivalent to:
# configure email sending
__PACKAGE__->config->{email} = [qw/SMTP localhost/];
-See also L<YAML>.
+See also L<Config::General|Config::General>.
=head1 Skipping your VCS's directories
See L<Catalyst::Model::DBIC::Schema>.
+=head2 Create accessors to preload static data once per server instance
+
+When you have data that you want to load just once from the model at
+server load instead of for each request, use mk_group_accessors to
+create accessors and tie them to resultsets in your package that
+inherits from DBIx::Class::Schema
+
+ package My::Schema;
+ use base qw/DBIx::Class::Schema/;
+ __PACKAGE__->register_class('RESULTSOURCEMONIKER',
+ 'My::Schema::RESULTSOURCE');
+ __PACKAGE__->mk_group_accessors('simple' =>
+ qw(ACCESSORNAME1 ACCESSORNAME2 ACCESSORNAMEn));
+
+ sub connection {
+ my ($self, @rest) = @_;
+ $self->next::method(@rest);
+ # $self is now a live My::Schema object, complete with DB connection
+
+ $self->ACCESSORNAME1([ $self->resultset('RESULTSOURCEMONIKER')->all ]);
+ $self->ACCESSORNAME2([ $self->resultset('RESULTSOURCEMONIKER')->search({ COLUMN => { '<' => '30' } })->all ]);
+ $self->ACCESSORNAMEn([ $self->resultset('RESULTSOURCEMONIKER')->find(1) ]);
+ }
+
+ 1;
+
+and now in the controller, you can now access any of these without a
+per-request fetch:
+
+ $c->stash->{something} = $c->model('My::Schema')->schema->ACCESSORNAMEn;
+
+
=head2 XMLRPC
Unlike SOAP, XMLRPC is a very simple (and imo elegant) web-services