Best deployment strategy with D7 ?

Events happening in the community are now at Drupal community events on www.drupal.org.
snoopy77's picture

Hi all,

This may have been asked many times, I have already found quite a large number of posts out there, but found no answer to a simple question -> how can I easily deploy a new version of my site from dev / staging to production (without losing any single piece of user content) ?

I have seen Features, Deploy modules. Smart approaches like this one http://drupal.org/node/181128, well -- all kinds of things, I also know that deployment should be at the heart of D8 with the DOG initiative.

But yet, I am completely confused because as of today, I would like to be able to :

  1. Keep a baseline locally on my dev machine, which would be the exact same version as the one in prod, except latest content (articles, comments, forums, users, user profiles, uploaded images, etc)

  2. Prepare a new version locally, based on that baseline, adding modules, new pages, etc.

  3. Import all latest content from prod and test the whole thing

  4. Export to prod once successfully tested

So I was wondering if someone could help me with that ... I certainly do not want to make changes live to the prod machine. Nor do I want to switch the site to maintenance mode while I would manually apply changes.

How do you guys deal with that ?

Cheers,

Comments

I wonder this also. Surely

stevengraff's picture

I wonder this also. Surely there must be a "best practice" approach someone has standardized on.

Hey @snoopy77 &

mrconnerton's picture

Hey @snoopy77 & @stevengraff,

What you want is actually pretty "easy" once you get into the swing of it. Basically it boils down to three parts:

  1. Export everything you can using the Features module.
  2. Make changes with normal custom code in those newly created modules
  3. Put EVERYTHING else into a hook_update_n script.

At this point you should have everything in code which will allow you to use git/svn to push the latest changes to your dev/stage/prod and then on those instances all you have to do is git pull or checkout a tag and run drush dbup -y which will execute all your update scripts and drush fra which will revert all your features to their code level default state (what you want)

I have a work in progress document I've been working on lately since I consult a lot on this kinda thing. You can see it here: http://mrconnerton.com/feature-driven-development


Matthew Connerton | matthew@aspiringweb.com
Aspiring Web a design & development agency

@mrconnerton

snoopy77's picture

Many thanks for your document ! I will take a look asap ... the one thing that bothered me with Features is the fact that it can't seem to be able to deal with everything (e.g. Content Types are fine ; not Content).

If I may ask for a bit more of your time ... could you elaborate just a bit on your items 2. and 3. ?

Many thanks again !

@mrconnerton

snoopy77's picture

Well, looks like your doc is covering my questions regarding your items 2. & 3.

I will read the whole thing carefully...

I guess I would have hoped one could avoid the "code" step but I do understand the benefits, especially as far a git goes...

Cheers