Catalyst::Plugin::ConfigLoader::Manual - Guide to using the ConfigLoader plugin
package MyApp; use Catalyst qw( ConfigLoader ... );
MYAPP_CONFIG - specific config file to load for "MyApp"
MYAPP_CONFIG
CATALYST_CONFIG_LOCAL_SUFFIX - global suffix for extra config files
CATALYST_CONFIG_LOCAL_SUFFIX
MYAPP_CONFIG_LOCAL_SUFFIX - suffix specifically for "MyApp"
MYAPP_CONFIG_LOCAL_SUFFIX
cnf
conf
name = TestApp <Component Controller::Foo> foo bar </Component> <Model Baz> qux xyzzy </Model>
ini
name=TestApp [Controller::Foo] foo=bar [Model::Baz] qux=xyzzy
jsn
json
{ "name": "TestApp", "Controller::Foo": { "foo": "bar" }, "Model::Baz": { "qux": "xyzzy" } }
pl
perl
{ name => 'TestApp', 'Controller::Foo' => { foo => 'bar' }, 'Model::Baz' => { qux => 'xyzzy' } }
xml
<config> <name>MyApp::CMS</name> <paths> <upload_dir>/var/www/docs/myapp-cms/uploads</upload_dir> </paths> <model name="DB"> <connect_info>dbi:mysql:cmsdb</connect_info> <connect_info>user</connect_info> <connect_info>password</connect_info> </model> <component name="View::TT"> <INCLUDE_PATH>__path_to(root,templates)__</INCLUDE_PATH> <ENCODING>UTF-8</ENCODING> <TRIM>1</TRIM> <PRE_CHOMP>2</PRE_CHOMP> <POST_CHOMP>2</POST_CHOMP> </component> </config>
Note that the name attribute for the model tag should be the relative namespace of the Catalyst model, not the absolute one. That is for MyApp::Model::Something the name attribute should be Something.
model
MyApp::Model::Something
name
Something
yml
yaml
--- name: TestApp Controller::Foo: foo: bar Model::Baz: qux: xyzzy
Model::MyModel: schema_class: MyApp::MySchema connect_info: - dbi:SQLite:myapp.db - '' - '' - AutoCommit: 1
As of Catalyst::Devel 1.07, a newly created application will use Config::General for configuration. If you wish to convert your existing config, run the following one-liner (replacing MyApp with your app's name):
perl -Ilib -MMyApp -MConfig::General -e 'Config::General->new->save_file("myapp.conf", MyApp->config);'
If you have UTF-8 strings in your Config::General-based config file, you should add the following config information to MyApp.pm:
__PACKAGE__->config( 'Plugin::ConfigLoader' => { driver => { 'General' => { -UTF8 => 1 }, } } );
When ConfigLoader reads configurations, it starts by reading the configuration file for myapp with one of the supported extensions as listed above.
myapp
For example, A Config::General config file is myapp.conf.
myapp.conf
If a configuration file called myapp_local exists with one of the supported file extensions, it will also be read, and values from that file will override values from the main config file.
myapp_local
A Config::General local configuration file would be called myapp_local.conf.
myapp_local.conf
The local suffix can be changed. See "get_config_local_suffix" in Catalyst::Plugin::ConfigLoader for the details of how.
local
This is useful because it allows different people or environments to have different configuration files. A project with three developers, Tom, Dick, and Harry as well as a production environment can have a myapp_tom.conf, a myapp_dick.conf, a myapp_harry.conf, and a myapp_production.conf.
myapp_tom.conf
myapp_dick.conf
myapp_harry.conf
myapp_production.conf
Each developer, and the web server, would set the environment variable to load their proper configuration file. All of the configurations can be stored properly in source control.
If there is no myapp_local.ext (where .ext is a supported extension), and the individual configuration files contain something required to start the application, such as the Model's data source definition, the applicaton won't start unless the environment variable is set properly.
myapp_local.ext
To install Catalyst::Plugin::ConfigLoader, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Catalyst::Plugin::ConfigLoader
CPAN shell
perl -MCPAN -e shell install Catalyst::Plugin::ConfigLoader
For more information on module installation, please visit the detailed CPAN module installation guide.