Scaling API-first – The story of a global engineering organization
Using Features
1. USING FEATURES
Badiu Alexandru
So you’ll have more free time too
Drupalcamp Bucharest 2011
2. MIGHT HAVE
HAPPENED TO YOU
• The dev – staging – production issue
• You build the site
• Client wants new stuff
• You build it on dev, passes staging
• Replicate on live site
• Write update functions, manual exporting of
views, cck
Drupalcamp Bucharest 2011
3. MIGHT HAVE
HAPPENED TO YOU
• The “I’ve done this before” issue
• You build some feature for client A
• Along comes client B who wants the same
thing
• Take code, exported views, cck, push to dev
• Work
• Replicate on prod
Drupalcamp Bucharest 2011
4. MIGHT HAVE
HAPPENED TO YOU
• The “Is there anyone editing file x.module?”
issue
• You work on a large project
• Each dev pushes code to a repository or no
repo at all
• What about database changes?
• Export views, cck and push them as well
• Make sure each dev imports stuff after each
update
Drupalcamp Bucharest 2011
5. MIGHT HAVE
HAPPENED TO YOU
• The “What the f**k do I do now?” issue
• Drupal is hard for beginners
• Lots of modules
• Building a feature requires multiple modules
usually and some knowledge about them
• Drupal recipes are good
Drupalcamp Bucharest 2011
6. DO YOU SEE A
PATTERN?
• Wouldn’t it be nice if you had a repository of
“modules” that create functionality a little
bit more than “list all blog posts” or “have a
block with latest promoted posts in category
A”?
• Learn the open source way
• Instant gratification
• Uuuu, this is cool
Drupalcamp Bucharest 2011
7. DO YOU SEE A
PATTERN??
• Wouldn’t it be nice if you could avoid all the
manual exporting and importing of new
features / changes and just package
functionality in a “module” that can be
updated?
• Modules are code, code can be put into
versioning control (and you should do it)
• Database changes can’t (easily)
Drupalcamp Bucharest 2011
8. DO YOU SEE A
PATTERN?
• Made some code or db changes?
• Just click to generate a new version of the
“module“
• Check in, others check out, update is done
• Less wrinkles and teeth grinding
Drupalcamp Bucharest 2011
9. SO WHAT IS THE
PROBLEM?
• This is not necessarily a Drupal only
problem
• It’s the nature of web development and the
way we do it
• Coding != Site building
• If only products of site building could be
exported…
• Oh wait
Drupalcamp Bucharest 2011
10. SO WHAT IS THE
PROBLEM?
Drupalcamp Bucharest 2011
11. EXPORTAB
• Exportables are ways of, well, exporting
things from Drupal into code bits
• Pioneered by Views, CCK is also using this
• Imagecache, Spaces, Context, Strongarm
• Is this enough?
• No, replication is still a… not a piece of cake
• Lots of missing modules (like taxonomy)
Drupalcamp Bucharest 2011
12. MODULAR
• It can also help if your site functionality is
broken into a modular design
• Like maybe prefixing presets and views with
blog_ or joblistings_
• Or use image_blog_medium rather than
image_blog_300x50
• Or have site_blog.module and
site_listings.module rather than that gigantic
site.module
• These are nice first steps
Drupalcamp Bucharest 2011
13. MODULAR
• What about blocks?
• Block visibility: php code or list of pages? Both?
Complex conditions?
• What about menus?
• I want this menu to appear when you’re on a blog
post but I want this other menu to appear on
listings.
• Sitewide conditions: this should appear only if
none of the conditions for the other “sections” are
met
Drupalcamp Bucharest 2011
14. CONTEXT
• Built by Development Seed
• You create sections for your site
• They are triggered by various conditions
• They enable blocks, activate menus
• They can be global
• They can act as failbacks
• They stack
• http://drupal.org/project/context
Drupalcamp Bucharest 2011
15. ALMOST
• We can organize “visual” bits and pieces of
our site using contexts
• We can use the same organization to name
the products of our various site building
tools
• We can follow a modular approach when
developing our modules
• If only we could package all these changes
into a module.
Drupalcamp Bucharest 2011
16. FEATURES
• The Features module does exactly that
• It takes different clues as to what you want
to package
• There’s the manual way too (it’s not perfect)
• It exports automatically whatever it can (not
all modules use exportables)
• It adds it’s magic
• Generates a “feature” which is actually a
module
Drupalcamp Bucharest 2011
17. FEATURES
• The module contains all the necessary bits and
pieces about your views, content types, presets
etc
• Contains code to activate them (create or update
them) and deactivate them
• Knows about dependencies so it won’t break the
site
• It’s a module so you can hack away
• Once you add more stuff: click click => new
version of the module
Drupalcamp Bucharest 2011
18. FEATURES
• It doesn’t use update functions
• But you can write your own
• Doesn’t script site building, uses
exportables
• This means that not all modules work
• Menu and Taxonomy have issues
• Webform creates actual nodes
• Feed nodes, ToS and Privacy Policy pages
• UUID for content
Drupalcamp Bucharest 2011
20. YOUR
• You have two options to integrate
• CTools Export API (recommended)
• Features hooks
• Before that you might have to
prepare
Drupalcamp Bucharest 2011
21. SHARE
• A feature can be installed on any other site
that has the required modules
• You can put it on d.org
• Features server: repository of features
• Internal or external
• Get notified of updates
• List of repos: http://groups.drupal.org/
node/50278
Drupalcamp Bucharest 2011
22. BASIC
• Simple demo
We are going to build a blog feature
Use a context to “group” it
Create a content type for it
Make it use a vocabulary
Create a listing and a block using views
Package it using Features
Deploy it on another site
Drupalcamp Bucharest 2011
23. BASIC
• We’re going to use BuildKit
• Drupal install profile with Features
• drush make "http://drupalcode.org/
project/buildkit.git/blob_plain/refs/
tags/7.x-2.0-beta2:/distro.make"
sitedir
Drupalcamp Bucharest 2011
24. ADVANCE
• The next step: the Spaces module
• Again, Development Seed
• Makes a Drupal site act like multiple sites
• Makes features spaces aware: selective
enabling of features on a per group basis
Drupalcamp Bucharest 2011