4. 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
5. Why developers cry?
Drupal is great:
• Flexible
• Build whatever you want
• Powerful tools like CCK, Views, Rules, Panles
etc.
So what's the problem?
6. 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...
8. 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
9. The developer's best friend: Drush
Tons of useful tools:
• Modules enabling, disabling, downloading
• Updates
• Cache clearing
• Dumps, backups, sync
• ...
• + modules add-ons
11. 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
12. The point of Migraine
Migraine knows how to deal with different types of
tables:
• Config tables
• Content tables
• Temporary tables
• Cache tables
• Ignore tables
13. 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
14. Migraine: workflow
Developer 1: Developer 2:
• Works with code and • pull
configuration • Restores from special
• Makes special dump dump
• Lets Migraine know • Config migrates!
about new tables (if
any)
• commit, push
15. 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
16. 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
18. Features: the idea
Image source: http://developmentseed.org/blog/2009/may/29/making-and-using-features-drupal
19. 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
20. 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
21. 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
22. 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
24. Features management
• Web UI
• Drush commands:
o view features list
o creates new feature
o updates code state from DB
o updates DB state from code (revert)
o view differencies between code and DB states
25. Features without UI
To create feature or add component:
• Add meta-info and dependencies in .info file
• Update feature
26. 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
27. Contoller feature
• Includes other features as dependencies
• hook_install() and hook_updates() relfect
general changes in the site's state
30. Features: disadvantages
• Requires more efforts to keep system's state up-
to-date
• Complex dependencies
• Some components aren't exportable
31. Useful links
• More about Migraine
o http://www.slideshare.net/drupalindia/migraine-drupal-syncing-
your-staging-and-live-sites-presentation
• More about Features
o http://developmentseed.org/blog
o http://nuvole.org/blog/code-driven-development
o http://openatrium.com/
32. Contacts
Anna Fedoruk,
Sterno.ru
afedoruk@sterno.ru
@sternodevteam
http://devteam.sterno.ru