I will be outsourcing my web site's development and will be mandating that the outsource use Drupal to build it. I will be hosting the site and the outsource will be delivering the changes to me on a regular basis. I want to isolate my production site, i.e. no direct edits to production will be allowed by the outsource. So I was trying to come up with a way that I could allow the outsource to have free reign to make changes in a development environment and deliver the end result to me so that I could implement it. I understand that there are ways to make this happen fairly easily; however my problem is this:

The site will be designed so that users of the site will be able to edit certain content. As I understand Drupal, the only two moving parts are the OS files or infrastructure and the database. I can easily track changes to the OS files, but the database changes are a bit more difficult to pin down. My original thought was to take a snapshot of my database and my OS and send it to the outsource. When they are finished making changes, the would send back any new or modified OS files as well as a new snapshot of the database. Then I could simply import the new database and deploy the new/changed files and be up and running.

But consider the scenario that while the outsource was making the necessary changes to their own copy, production was changing due to end user updates to the content. If I simply take the new database from the outsource and import it over the production database, it will overwrite any of the updates that occurred from the time the outsource's snapshot was taken.

Therefore, my question is; are there any modules or combinations of components that would facilitate a process to handle this scenario? I thought of using a stand by database and have the outsource make updates to the stand by database, but I am not comfortable that the stand by database will handle updates very well if they are not coming from the master database. I was hoping that there was a module that would function much like an automatic change tracker; something that you could turn on to begin recording, then turn off when done making changes. Then you would have a record of all actions that have taken place. Much like recording a Macro in MS Excel.

Comments

gpk’s picture

>are there any modules or combinations of components ... like recording a Macro in MS Excel
Possibly there are but I'm not aware of them (have a look here - http://drupal.org/node/206666#DRUPAL-5 - I've not checked recently). In Drupal 6.x there is a drupal.sh script you can use to run Drupal from the command line. Maybe there is something similar as a contrib module for D5.

TBH config changes of the sort you describe are minor compared with content creation/user activity. Yes, have your developers use a recent snapshot of the live site as a developmental site/sandbox, but often it's really not too onerous to then make the necessary config changes to the live site to match. It's selecting and testing modules, trying out different configurations till you get what you want, modifying the theme (external files), and coding and testing any custom modules (external files again) needed for one's site that take the time.

Once you are happy that the developmental site is configured just right then backup the DB of your live site, optionally put it in maintenance mode, and then either implement the config changes yourself or (by now you should be more confident in your developers!) have them do it. I really can't see it taking that long, unless you have something spectacularly complicated in mind. It might be rather simpler and less error-prone than trying to automate the process.

Good luck,

gpk
----
www.alexoria.co.uk

dhaws’s picture

Thanks for your insight. I agree with most of what you are saying, but the reason I am looking for this type of solution is that I think it would be less error-prone and quicker to deploy. Most of the changes will likely be pretty simple, but there will be a possibility for more complex items. This is not my concern though; it is more that I want to have a standard repeatable process for deploying these changes without having to be knowledgeable of the changes themselves.

gpk’s picture

dhaws’s picture

Does this module go a step further to actual content creation. This podcast explains how to record semi-complex configuration changes such as a new content type, but will it track a node that was created? I think it might, because it is explained as recording any form submissions of which node creation would fall; but this is speculation.