On Fri, Sep 11, 2009 at 3:37 PM, Jonathan Swartz <swa...@pobox.com> wrote:
>
>> On Fri, Sep 11, 2009 at 3:11 PM, Jonathan Swartz <swa...@pobox.com> wrote:
>>>
>>> It seems like it's available separately in Apache-Reload distribution:
>>> http://cpan.uwinnipeg.ca/dist/Apache-Reload
>>>
>>> But it's already pretty much a straw-man option for me. :)
>>
>>>>> Problem: some modules fail to reload properly. Sometimes the failure
>>>>> is intermittent, depending on the order of module loading and other
>>>>> esoteric details. Moose and ORM modules seem particularly prone to
>>>>> reload failures. For me, this level of unpredictability makes
>>>>> *::Reload too frustrating to use.
>>
>> I've run into issues with reloading ORM based modules such as when I
>> change my DBIx::Class based schema.  I get an inconsistent hierarchy
>> error from Class::C3.  So in those cases a server restart is required.
>>
>> However, if your model layer is abstracted from mod_perl, you should
>> be able to develop against your model layer using tests, and then
>> install your upgraded model and restart Apache then.  The behavior
>> where I encounter problems reloading changes to ORM modules has
>> enforced a good separation of model (ORM) and controller( mod_perl )
>> code in my application.
>
> I'm all for TDD, to be sure, but in practice not everything - especially
> with controller and view-specific modules - is going to be developed in this
> way.
>
> I've often exhorted Mason developers to move things out of components into
> modules, but a real objection to that has been the server restart cost, and
> I've never had a good answer for it. Mason components (like TT templates,
> etc.) can pretty much always be reloaded without restart, which I expect is
> one reason why so much code ends up there.

That makes a lot of sense.

Only thing I could suggest would be to exclude your Moose based
modules from Apache::Reload reload list if they are causing problems.

Although, if there was a way to kill off user owned httpd processes
when a code change was made, you could extend Apache::Reload to have
certain modules cause httpd recycling vs code reloading.

Maybe something like:

PerlSetVar ReloadAll On

PerlSetVar ReloadHttpds My::Moose

So that modules in ReloadHttpds terminates existing user httpd
processes and causes the server to fork off new httpd children.

>
> Jon
>
>

Reply via email to