[dancer-users] Trouble with DBIC in Plugins

Naveed Massjouni naveed at vt.edu
Mon May 4 03:46:26 BST 2015


What version of the DBIC plugin are you using? If you are not using the
latest, can you upgrade and let me know if you still get the same warning.
Thanks,
Naveed (DBIC plugin author)

On Sat, May 2, 2015 at 7:34 AM, Matthew Mallard <matt at q-technologies.com.au>
wrote:

> Andy,
>
> Thanks again for your help.  This code works:
> my $schema;
>
> on_plugin_import {
>     my $dsl = shift;
>     # Grab a handle to the Plugin::DBIC schema
>     die "No schema method in app. Did you load DBIC::Plugin::DBIC before
> Custom::Plugin?" unless $dsl->can('schema');
>     $schema = $dsl->schema;
>     $dsl->debug( "**** Got Schema **** ");
> };
>
> Having said that, I realise the original code would have worked too but
> too many things were changing at the same time and it caught me out.  I
> moved from mysql to postgresql and the case sensitivity was causing a
> problem, there were rather radical changes in the way Dancer2 was requiring
> me to structure my code and to top it off the "DEPRECATED: Custom::Plugin
> calls 'dsl' instead of '$dsl->dsl'. at
> /perf/perl/lib/perl5/Dancer2/Plugin/DBIC.pm line 13.” was making me think I
> was on the wrong track.  But this warning remains even with the new code.
>
> Turning statement logging on in postgres helped me track down the case
> mismatch.
>
> Cheers,
> Matt
>
> On 2 May 2015, at 7:47 pm, Andrew Beverley <andy at andybev.com> wrote:
>
> > On Sat, 2015-05-02 at 12:50 +1000, Matthew Mallard wrote:
> >>>> I’m getting a bit confused with plugins.  I’m sure that I was able to
> >>>> use the DBIC Plugin at one point from one of my plugins, but I can’t
> >>>> seem to get it to  work in 0.159002 or 0.160000.  DBIC seems to be
> >>>> okay outside of plugins.
> >>>
> >>> Firstly, there is change going on in the world of plugins, which I
> >>> suspect will fix this, but I haven't read up on the full details
> myself:
> >>>
> >>>
> http://lists.preshweb.co.uk/pipermail/dancer-users/2015-April/004512.html
> >>>
> >>>> * how do I get DBIC to print the SQL it’s executing so I can double
> >>>> check it’s what I’m expecting?
> >>>> * am I doing something else wrong in the way I’m trying to use DBIC?
> >>>
> >>> This is a bit more tricky. With the current plugin architecture,
> >>> "schema" is not available in the DSL when you call it from another
> >>> plugin as you are doing. You can workaround this by capturing it during
> >>> plugin initialisation, as long as you load the DBIC plugin before
> yours.
> >>> See Plugin::Auth::Extensible::Provider::DBIC for an example:
> >>
> >> So do I create a sub in my custom plugin along these lines:
> >> sub new {
> >>    my ($class, $dsl) = @_;
> >>
> >>    # Grab a handle to the Plugin::DBIC schema
> >>    die "No schema method in app. Did you load DBIC::Plugin::DBIC before
> My::Custom::Module?"
> >>        unless $dsl->can('schema');
> >>    my $schema = $dsl->schema;
> >
> > Yes, similar to that, but using on_plugin_import. See this example:
> >
> >
> https://github.com/PerlDancer/Dancer2-Plugin-Auth-Extensible/blob/de84a4a5baf5b56a83906355de075678c485fc51/lib/Dancer2/Plugin/Auth/Extensible.pm#L1158
> >
> >>    my $self = {
> >>        dsl_local      => $dsl,
> >>        schema         => $schema,
> >>    };
> >>    return bless $self => $class;
> >
> > I don't think you need to bless your class, as it's already blessed. You
> > just need to store the schema in a global in your module, a bit like
> > $settings here:
> >
> >
> https://github.com/PerlDancer/Dancer2-Plugin-Auth-Extensible/blob/de84a4a5baf5b56a83906355de075678c485fc51/lib/Dancer2/Plugin/Auth/Extensible.pm#L13
> >
> >> Then in my routes module I call plugins in this order:
> >> use Dancer2::Plugin::DBIC
> >> use My::Custom::Module
> >
> > Yes.
> >
> >> How does 'new' get called and what do I use to reference the schema in
> my custom plugin.
> >
> > See above.
> >
> >> Let me know if there is some other background reading I should be doing
> >> for how this work,
> >
> > To be honest, it's a dirty hack, so you won't find any documentation on
> > it. You might be better waiting for the new plugin architecture if you
> > can.
> >
> > Andy
> >
> >
> > _______________________________________________
> > dancer-users mailing list
> > dancer-users at dancer.pm
> > http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>
> _______________________________________________
> dancer-users mailing list
> dancer-users at dancer.pm
> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.preshweb.co.uk/pipermail/dancer-users/attachments/20150503/5ff948e4/attachment.html>


More information about the dancer-users mailing list