bennymack has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks,

I'm working on something along the lines of Care and Feeding of Large Web Applications. Specifically, "Managing large sets of CPAN modules, some with local changes.", "Creating an automated build system.", and "Testing strategies for a complicated database application and a modern web UI."

My question for you all *cough*perrin*cough* is what is a good starting point for this type of thing? Is there something available pre-built that I can start hacking on? Or should I just start with a basic CPAN style build module such as ExtUtils::MakeMaker, Module::Build, or Module::Install, and go from there? If so, what's the best build module currently? Something to handle tests and pre-requisites. And yet flexible enough to have additional functionality outside of its original scope of design built or added on top of it.

Thanks in advance!!!

Replies are listed 'Best First'.
Re: Best Build/Test System?
by perrin (Chancellor) on Aug 15, 2007 at 01:49 UTC

    You rang? :)

    I think you're talking about a couple of different things here: a test runner framework and a build system. I also think the build for a large application with bundled dependencies is beyond the scope of module-oriented systems like Module::Build and MakeMaker. (I haven't looked closely at Module::Install.)

    For the build system, you could start by taking the one from Krang. It's essentially the same as the one I described in the talk: automated build and install of locally bundled CPAN modules, Apache, and mod_perl into a non-system directory.

    If that doesn't suit your fancy, you can probably get CPANPLUS to install local modules, although I haven't tried. I was also intrigued by pip. In either of those cases though, you will have to build something yourself to deal with the fact that many popular modules ask interactive questions during their installation. We handled this with Expect, and I think you could plug that into pip without too much trouble.

    In terms of a test runner, we basically took what MakeMaker does for "make test" and modified it to suit our purposes. You may prefer to steal the Module::Build stuff there, or some combination of these and the prove command. Our issue with prove was the need to do some setup before running tests, but maybe you can find a clever way to integrate that with prove.

    That's sort of a general answer. Is there something specific you're having trouble with? I do suggest taking a look at the Krang system if you're just wondering how this stuff I described looks in real life.

      That's sort of a general answer. Is there something specific you're having trouble with?

      No, that's great! I'm really just gathering info. Having all of these different possibilities to investigate is exactly what I need. Thanks a bunch!