# How do you compensate for templates, template plugins (I use Template Toolkit (Template)), application modules, instance scripts (I use CGI::Application) and non-application modules being inter-dependant?
I put everything I code in version control. For modules, I depend on debian's packaged perl libraries. If I can't find one, I create a deb file with dh-make-perl and put it in version control. If I want to modify a library's behaviour, I copy the library to version control and modify it and make sure my app use it. I make my 'build' script to apt-get all those perl libraries and install the deb files I put in the code.
# How do you write tests that depend on your webserver config (and its environment) and package them with your module?
I don't write automated test :(. But configuration environment is abstracted into a module. I also create template files for apache configuration, so in every box I only need to add 'Include' directive to include it.
# How to you get your personal machine to emulate the environment of multiple machines?
I don't. I just make sure the code works correctly, and all multiple machine related problems are fixed in production. That's scary, but that's all I've got right now.
# How do you move material to your test server, and from there to production server?
# How do you do some of these things in a multi-user environment? (Is the test server a "check out"? Who checks it out?)
All instance of the web app are actually an svn checkout directory. So I only need to do 'svn up' to upgrade it to the new version. I don't tag the versions because my environment is very small and informal and no release management at all. Two major number versions can coexists in one box as two checkout directory of different branches. But each has its own apache configuration files.
My wishlists for my app are:
- Have an automated test
- Have an installation script
- Have a code monkey to code for me so I can read perlmonks all day