<div dir="ltr">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.<div>Thanks,<br><div>Naveed (DBIC plugin author)</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, May 2, 2015 at 7:34 AM, Matthew Mallard <span dir="ltr"><<a href="mailto:matt@q-technologies.com.au" target="_blank">matt@q-technologies.com.au</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Andy,<br>
<br>
Thanks again for your help.  This code works:<br>
my $schema;<br>
<br>
on_plugin_import {<br>
    my $dsl = shift;<br>
<span class="">    # Grab a handle to the Plugin::DBIC schema<br>
</span>    die "No schema method in app. Did you load DBIC::Plugin::DBIC before Custom::Plugin?" unless $dsl->can('schema');<br>
    $schema = $dsl->schema;<br>
    $dsl->debug( "**** Got Schema **** ");<br>
};<br>
<br>
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.<br>
<br>
Turning statement logging on in postgres helped me track down the case mismatch.<br>
<br>
Cheers,<br>
Matt<br>
<div class="HOEnZb"><div class="h5"><br>
On 2 May 2015, at 7:47 pm, Andrew Beverley <<a href="mailto:andy@andybev.com">andy@andybev.com</a>> wrote:<br>
<br>
> On Sat, 2015-05-02 at 12:50 +1000, Matthew Mallard wrote:<br>
>>>> I’m getting a bit confused with plugins.  I’m sure that I was able to<br>
>>>> use the DBIC Plugin at one point from one of my plugins, but I can’t<br>
>>>> seem to get it to  work in 0.159002 or 0.160000.  DBIC seems to be<br>
>>>> okay outside of plugins.<br>
>>><br>
>>> Firstly, there is change going on in the world of plugins, which I<br>
>>> suspect will fix this, but I haven't read up on the full details myself:<br>
>>><br>
>>> <a href="http://lists.preshweb.co.uk/pipermail/dancer-users/2015-April/004512.html" target="_blank">http://lists.preshweb.co.uk/pipermail/dancer-users/2015-April/004512.html</a><br>
>>><br>
>>>> * how do I get DBIC to print the SQL it’s executing so I can double<br>
>>>> check it’s what I’m expecting?<br>
>>>> * am I doing something else wrong in the way I’m trying to use DBIC?<br>
>>><br>
>>> This is a bit more tricky. With the current plugin architecture,<br>
>>> "schema" is not available in the DSL when you call it from another<br>
>>> plugin as you are doing. You can workaround this by capturing it during<br>
>>> plugin initialisation, as long as you load the DBIC plugin before yours.<br>
>>> See Plugin::Auth::Extensible::Provider::DBIC for an example:<br>
>><br>
>> So do I create a sub in my custom plugin along these lines:<br>
>> sub new {<br>
>>    my ($class, $dsl) = @_;<br>
>><br>
>>    # Grab a handle to the Plugin::DBIC schema<br>
>>    die "No schema method in app. Did you load DBIC::Plugin::DBIC before My::Custom::Module?"<br>
>>        unless $dsl->can('schema');<br>
>>    my $schema = $dsl->schema;<br>
><br>
> Yes, similar to that, but using on_plugin_import. See this example:<br>
><br>
> <a href="https://github.com/PerlDancer/Dancer2-Plugin-Auth-Extensible/blob/de84a4a5baf5b56a83906355de075678c485fc51/lib/Dancer2/Plugin/Auth/Extensible.pm#L1158" target="_blank">https://github.com/PerlDancer/Dancer2-Plugin-Auth-Extensible/blob/de84a4a5baf5b56a83906355de075678c485fc51/lib/Dancer2/Plugin/Auth/Extensible.pm#L1158</a><br>
><br>
>>    my $self = {<br>
>>        dsl_local      => $dsl,<br>
>>        schema         => $schema,<br>
>>    };<br>
>>    return bless $self => $class;<br>
><br>
> I don't think you need to bless your class, as it's already blessed. You<br>
> just need to store the schema in a global in your module, a bit like<br>
> $settings here:<br>
><br>
> <a href="https://github.com/PerlDancer/Dancer2-Plugin-Auth-Extensible/blob/de84a4a5baf5b56a83906355de075678c485fc51/lib/Dancer2/Plugin/Auth/Extensible.pm#L13" target="_blank">https://github.com/PerlDancer/Dancer2-Plugin-Auth-Extensible/blob/de84a4a5baf5b56a83906355de075678c485fc51/lib/Dancer2/Plugin/Auth/Extensible.pm#L13</a><br>
><br>
>> Then in my routes module I call plugins in this order:<br>
>> use Dancer2::Plugin::DBIC<br>
>> use My::Custom::Module<br>
><br>
> Yes.<br>
><br>
>> How does 'new' get called and what do I use to reference the schema in my custom plugin.<br>
><br>
> See above.<br>
><br>
>> Let me know if there is some other background reading I should be doing<br>
>> for how this work,<br>
><br>
> To be honest, it's a dirty hack, so you won't find any documentation on<br>
> it. You might be better waiting for the new plugin architecture if you<br>
> can.<br>
><br>
> Andy<br>
><br>
><br>
> _______________________________________________<br>
> dancer-users mailing list<br>
> <a href="mailto:dancer-users@dancer.pm">dancer-users@dancer.pm</a><br>
> <a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" target="_blank">http://lists.preshweb.co.uk/mailman/listinfo/dancer-users</a><br>
<br>
_______________________________________________<br>
dancer-users mailing list<br>
<a href="mailto:dancer-users@dancer.pm">dancer-users@dancer.pm</a><br>
<a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" target="_blank">http://lists.preshweb.co.uk/mailman/listinfo/dancer-users</a><br>
</div></div></blockquote></div><br></div>