[Dbix-class] connecting to different environments

Trevor Leffler tleffler at uw.edu
Mon Sep 12 18:53:41 GMT 2011


Alan Humphrey wrote:
> Hi –
> 
> In a system like this (or in any system using config files) what does 
> your connect statement look like?  I’m imagining something like:
> 
> my $schema = MyApp::Schema->connect();
> 
> or
> 
> my $schema = MyApp::Schema->connect( $env_override );
> 
> where the logic in connect takes care of dealing with the config file 
> and does other safety checks (e.g. no access to production data from a 
> non-production machine).
> 
> The docs say to overload connection to change the behavior of connect.  
> Is that what people are doing?
> 
> Thanks again, this discussion is very helpful.
> 
> -          Alan

Right, it boils down to a $schema->connect(@connectinfo) statement, per 
the docs.  What @connectinfo looks like by the time it gets to connect() 
is determined by the config system, e.g. merging files and values, etc. 
  I haven't needed to alter the behavior of connect(ion), so no 
overrides here.

Your example safety check is interesting... I've always handled that 
kind of authZ at the client-server level via the DB's access and 
privilege system.  Your app could handle such an "access denied" 
exception at a higher level than connect() in order to, say, display a 
user-friendly message.

As an aside, and to further pick on the example (sorry), I would hope 
that the DBA (which might be you) has configured your prod DB to accept 
connections from a very limited set of clients.  For a simple web stack, 
that might be localhost and the prod application server(s).

Cheers,
--Trevor



More information about the DBIx-Class mailing list