Anna Fedoruk.Theworkflow.DrupalCamp Kyiv 2011

Post on 17-Dec-2014

1,436 views 4 download

description

 

transcript

Drupal development: The workflow

Anna Fedoruk, Sterno.ru

Gold Sponsor ofDrupalCamp Kyiv 2011

Silver Sponsors ofDrupalCamp Kyiv 2011

Table of contents

1.Dark side of Drupal's power

2.What's the problem and how to deal with

settings in DB

3.Approach 1: migraine-powered workflow

4.Approach 2: features-driven development

Why developers cry?

Drupal is great:• Flexible• Build whatever you want• Powerful tools like CCK, Views, Rules, Panles

etc.So what's the problem?

Why developers cry?

OMG, the settings in DB!• Enabled modules and their settings• Blocks, taxonomy vocabularies, CCK content

types• User roles, permissions• Views, Rules, Contexts, Panels...

Why developers cry?

Migrations of DB-ed settings are very time-consuming, boring and error-prone

What can we do?

We need to:• Track configuration changes• Migrate these changes

Approaches:• Migrate changes in DB via versioned dumps• Move settings into code: Features ecosystem

The developer's best friend: Drush

Tons of useful tools:• Modules enabling, disabling, downloading• Updates• Cache clearing• Dumps, backups, sync• ...• + modules add-ons

Approach 1: versioned DB dumps

Our experience with Migraine

• Migraine by Noosphere Networks http://ashearer.com/software/server-administration/migraine

• D6 modification by mukesh.agarwal17 http://www.blisstering.com/migraine-synchronize-your-

development-staging-and-production-sites-databases-drupal-6

• drush• drush add-on by Danil Semelenov

The point of Migraine

Migraine knows how to deal with different types of

tables:• Config tables• Content tables• Temporary tables• Cache tables• Ignore tables

Migraine Drush add-on

A wrapper for migraine commands:• Create local DB dump• Restore DB from local dump• Full site migration including source code and DB• Sync files on local server with remote server

Migraine: workflow

Developer 1:• Works with code and

configuration• Makes special dump • Lets Migraine know

about new tables (if

any)• commit, push

Developer 2:• pull• Restores from special

dump• Config migrates!

Migraine: workflow

Migration from @dev to @test:• Make special dump• Sync files• Migrate DB

Migration from @dev to @prod:• Migration doesn't affect content tables• Manually correct content tables schema

Migraine: pros and cons

Advantages:• As all tables are classified, no need to think • Doesn't require anything from components

Disadvantages:• Hard to resolve conflicts in dumps• Chaos reigns• In fact you still need to think

Approach 2: code-driven development

Features: the idea

Image source: http://developmentseed.org/blog/2009/may/29/making-and-using-features-drupal

Features

• Code-driven development: put all the settings

into code • Features know how to deal with Views, CCK,

Imagecahe, node types, user roles and

permissions, Panels, Contexts, Rules and more

Features ecosystem

• Features • Ctools exportables• Strongarm — variables• Boxes — custom blocks (replaces core «add

block») • Context — blocks, breadcrumbs and so on • Diff — a tool for work with features states

Feature is a module

• .info — meta-info, dependencies• .module — place your code here• .install — usual install file• .features.inc

Configuration blocks:• feature_name.<smthng>.inc — generated by

Features module

Feature state can be:

• Default — config in code = config in DB• Overriden — config in code != config in DB

(needs revert or update)• Needs review — config in code != config in DB,

code was changed

A feature workflow

Developer 1• Creates feature• Enables feature• Works with config• Updates feature• commit, push

Developer 2• Pull• Enables/revert feature• Config migrates!

Features management

• Web UI• Drush commands:

o view features listo creates new featureo updates code state from DBo updates DB state from code (revert)o view differencies between code and DB states

Features without UI

To create feature or add component:• Add meta-info and dependencies in .info file• Update feature

What about our coworkers?

feature is a module, so one can use hook_install()

и hook_update() to:• Enable modules• Add roles, url aliases etc.• Any custom code

hook_update() to share with those who work in the

same time

hook_install() to share with new developers

Contoller feature

• Includes other features as dependencies• hook_install() and hook_updates() relfect

general changes in the site's state

Features: The Workflow

Features: advantages

• Easy to work with code in VCS• Features are reusable• Beautiful

Features: disadvantages

• Requires more efforts to keep system's state up-

to-date• Complex dependencies• Some components aren't exportable

Useful links

• More about Migraine o http://www.slideshare.net/drupalindia/migraine-drupal-syncing-

your-staging-and-live-sites-presentation

• More about Featureso http://developmentseed.org/blogo http://nuvole.org/blog/code-driven-developmento http://openatrium.com/

Contacts

Anna Fedoruk,

Sterno.ru

afedoruk@sterno.ru

@sternodevteam

http://devteam.sterno.ru