SlideShare a Scribd company logo
Upgrades and
Migrations, how?
David Lanier
@nadavoid
ThinkShout

PREFACE
Overview
• Getting your Drupal 6 site onto Drupal 7
• Use traditional upgrade or migrate data to
new site

• Look at the benefits and drawbacks of both
approaches

• Primarily for people who have not gone
through either process

Your site is unique, so take what you find today and let it help you in your decision making. I
won't be saying always do it one way.
Both approaches do require work.
An Architecture
Metaphor
• Changing the foundation (codebase) of
your house
Basic pieces
• Codebase (core, modules, themes, libraries)
• Database
• Files (images, pdfs, mp3s, etc.)

Files = content.
Database & Files together = "data"
Deployment

• Same issues as replacing any site, unless the
D6 site is incredibly simple.

I won't be dwelling on this today because it is such a common task.
Upgrade overview
• Swap out the foundation, house in place.
• Replace codebase, run upgrade scripts on
existing data & files.

• Built into core and contrib.
• UI based
Lift the house, swap in a new foundation, set the house down on the new foundation.
The upgrade scripts essentially upgrade the plumbing and wiring to be compatible with the
new foundation.
UI centered, but drush can be used for most upgrades as well. 'drush updb'
Upgrade drawbacks
• Hard to get rid of legacy cruft
• Field names
• Content type structures
• Anything else that seems old or odd
Migrate overview
• Build new house on a new foundation.
• Build new site. Import data from old site.
• Write custom code to define the specifics
of the migration.

The details of a migration must be handled by writing custom code. There is also helpful
support in the UI.
Migrate drawbacks
• Very code-centric
• Very granular

Averse to custom coding? Maybe prefer upgrade. But Migrate isn't so hard, I promise!
Granular: you generally have to specify everything (image alt, title, language, etc.). Of course,
that could also be a good thing. You're in full control.
Feeds
• Best fit is to regularly import new data.
• Not usually a good fit for full migrations.
• Easy to learn, but it usually falls short when
getting into the details, such as handling
relationships and very large datasets.

I really like feeds, and it can be super for importing data into Drupal. But it's just not a
module I generally recommend for a full site migration.
Initial preparation
• Regular D7 system requirements
(drupal.org/requirements)

• Local development environment that can
support several copies of the site

• Reference site
• Data source
• Development
CHAPTER 1
D7: PHP 5.3 recommended, MySQL 5.
Local Dev: for testing, experimenting, practicing
Architecture of current
site
• Inventory of modules, libraries, themes
•drush pml | grep Enabled
• Content Types, fields
• Views, other configuration
• Important pages, capabilities, workflows
• Reference copy of the site
Save lists of directories (list of modules)
Save drush output
Save certain pages
Have a clear idea of exactly what it is you're upgrading from
Handy "archeology"
modules
• drupal.org/project/sitedoc
• drupal.org/project/hacked
Determine upgrade
path
• Module to D7 options
• same module (pathauto)
• different module
• moved into core (CCK to fields)
• nothing available, so custom solution
This is where most of the upgrade work will be.
Be sure to check if D7 version of modules have their own dependencies. Views adds a ctools
dependency. Others will likely require the libraries module.
Determine upgrade
path
• Custom modules
• Converting 6.x modules to 7.x:
http://drupal.org/node/224333

• Coder module
Any custom code will need to be updated to match the Drupal 7 API and coding standards.
Determine upgrade
path
• Theme
• Update or replace base theme
• Update or rebuild subtheme
• Upgrading 6.x themes to 7.x

https://drupal.org/node/254940

A custom theme is custom code, so needs same attention.
Prepare the source
• Install a copy of the site to use as the
source.

• Remove all disabled or unused modules.
• Update all remaining modules to their
latest D6 versions.
How to Upgrade
• Practice on a copy of the site.
• 3 dev sites:
• Pristine copy of site for reference.
• Copy of site with everything D6 updated.
• Copy that is actually getting upgraded.
CHAPTER 2
Today's Example
• RidePDW.com Portland Design Works
• Portland company that develops bicycle
accessories

I experimented with an upgrade, but ended up doing a migration instead, primarily because
of keeping data in sync.
Drupal upgrades and migrations. BAD Camp 2013 version
Process
• Commit after each step.
• Definitely after updating each module.
• Include db exports, as outside files.

DB Exports: if not in the repo, in their own folder.
Upgrade core
• Refer back to your list of all enabled
modules

• Disable all enabled contrib modules
• Switch theme to Garland, including the
admin theme
Upgrade core
• Use the copy of the site that you have for
actually upgrading

• Replace core files manually
• Delete core directories & files
• Add the new ones
• Download Drupal, move the files into
place

I generally prefer to swap in the new files/folders, rather than building up a new codebase.
(List of "incompatible" modules helps me know where I am)
Update the database
• Do 'drush updb' (Or use /update.php)
• Watch output, observe warnings
• Save output to refer back to
Update, drush example
Update, drush example
Update, drush example
Upgraded! (core only)
Core upgrade
complete!
• Yay!
• You're running Drupal 7 now
• Commit the current state to a repo
• Next step, contrib modules
Upgrading contrib
modules
• Upgrade one at a time
• Module's d.o page
• Module's README.txt or INSTALL.txt or
UPGRADE.txt

• Check for special steps, instructions
• Check for new dependencies
Do a little research on each module before trying. Then go ahead and try.
Dependencies: views needs ctools. ubercart needs rules. rules needs entity.
Add the new code
• This works: drush dl modulename
• Or, delete existing, then add the new
Where to start?
• Start with the most foundational
• ctools
• views
• Or most standalone
• pathauto
• devel
Views
• Replace views code
• Update database
• Enable the upgraded module

This is the usual process. But it's still best to see the module's upgrade documentation first.
Views database updated
Enable views

Views requires ctools now.
Enable views

After downloading ctools
Upgrade CCK
• Download D7 version of CCK
• Enable the content_migrate module
• Use the UI to migrate CCK fields to drupal
core fields

Kind of a special case, because it's a major architectural change, bringing fields into core.
Also common pattern: contrib module providing upgrade path into core.
Available fields

Provides suggestions of things to do, and notes about what it will do.
Caveat: it lets you migrate fields, even if the relevant content type does not yet exist properly
in the upgraded site. Should content types come before fields?
Converted Fields
Unavailable Fields
Migrate CCK fields
• Install required modules
• Enable modules that define content types
• Sometimes several layers of dependencies
emerge

• Can end up being messy and difficult to
fully successfully migrate all CCK fields.

dependency chain: Nodereference field is used to refer to products. Products are defined by
ubercart. Ubercart requires Rules. Rules requires entity api.
That was Upgrade

• Mainly a taste of what's in store when
doing an upgrade
Next up: Migrate

CHAPTER 3
How to Migrate
• Building a whole new house, with its own
new foundation.

• Then we will move all of our data into it.
Plan and get organized
• Collect data and files into a safe place, to
use as a pristine, read-only source.

• Make a spreadsheet or list to plan out your
mapping

• Build out the architecture of the new site
Identify questionable or troublesome pieces, e.g. whether to keep certain fields.
Build: at least content types & fields.
Anything else that is needed by your migrated data.
Set up environments
• Install or get access to a reference site
• Install source database
• Install a built destination site
• An IDE for exploring the migrate API
reference site = this is how it currently is. must be inspectable.
Migrate using IDE
Start a new module
• Install the migrate module
• Create a new module that extends classes
that are in the migrate module
Important functions
• addFieldMapping()
• addSimpleMappings()
• defaultValue()
• sourceMigration()
• addUnmigratedDestinations()
• addUnmigratedSources()
Just to get a flavor of what you will be using.
Module structure
• .info file: file list
• .module file: specify migrations via
hook_migrate_api()

• Migration class files: handle the details and
mappings of a migration

• name: sitename_migration
.info file: Mainly lists files that are used.
.module file: register migrations and their classes by using hook_migrate_api().
Migration class files: I generally prefer one class per file, but there's nothing wrong with
having multiple classes in one file too.
Directory list

Most basic structure that provides a functional migration. But there are many more
complicated examples.
.info file
.module file
class file
How did you find out?
• Comments in the migrate module
• migrate_example module (inside migrate)
• articles on btmash.com
Additional Docs
• Source code
• Suggestions in IDE
• Migrate handbook at drupal.org/migrate
Before enabling custom
migrate module
Migration class
• Set description
• Define database source
• Create query to get data
• Tell migrate that this query is the source of
this migration

• Do the mappings
This is essential before you can enable your custom module without errors.
Set description
Set database
Define the query
Set the source
Set the destination
Set up table mapping

Enables migrate to map source rows to destination rows
Map first field
Enable the module

List of migrations & their status.
Status of mappings.
There are equivalent tools in drush.
Overview
Destination
Source
Done
Mapping process
• Add fields as needed to the query
• Add mappings until the mapping screen
clear.

Adding fields will usually mean adding joins.
Mapping a subfield
Mapping a reference

From a ProductHelpMigration
Self references
• Handles creating references to same
import

• Uses a createStub function
Mapping a file field
Term References
• Use a dependent migration
• Or create as needed
Repeats
• "Update" completely overwrites
• Highwater mark

In addition to rollback and reimport.
highwater mark, important for bringing in added content.
brings in any new items with a greater value of highwater than last recorded.
No other comparisons. (no import "changed")
Manipulating source
data

• prepareRow() function

Looking up a value for 'weight_units' from another table.
migrate_extras
• Provides support for many contrib modules
• Addressfield, entity api, more
• Excellent examples of custom handlers
migrate_d2d
• Current stable version (2.0)
• Ends up being somewhat cumbersome.
• Dev version (2.1-beta1)
• Looks very promising
Not migrate_d2d 2.0:
- complicated things for me as a newcomer to the migrate framework.
- Added too many layers and did not streamline things for me.
- Had to unmap many things that it automatically mapped for me.
migrate_d2d 2.1
• Provides migration setup wizard
• Provides UI for field mapping
• Requires 2.6 version of Migrate module,
which is also still in development
Step 1
Step 2
Step 3
Step 4
Step 5
Dashboard (Groups)
Migrations
Product migration
Migration mappings
Migration mappings 2
Migration mappings 3
Pretty slick!
migrate_d2d drawbacks
• Still really new (alpha/beta/dev status)
• Making changes to initial settings

overwrites existing migrate configuration

• Cannot (yet) export configuration
• drupal.org/node/1983404
• Uncertain how to add regular migrate code
to what is done in the UI

• drupal.org/node/2118243
Making changes, such as database credentials or adding a content type.
Regular programmatic code = prepareRow, anything that the UI doesn't provide but is
available in the API.
Migrate
• Showed important parts
• There's a LOT more there
QA. Did it work?
• Regardless whether upgrade or migrate
• Have someone else check your work
• Have the client check your work
• Pass any existing acceptance tests
SIDEBAR
Make certain. This will be the content of the next version of this site.
QA Questions
• Correct content?
• Correct versions of content?
• Complete number of fields?
• Complete metadata? (urls, relations, dates,
authors, tags)
• Complete number of nodes?
• Images and media? (block live site)
Which way do I go?

• WHY do you want to go?

CHAPTER 4
First thing to think about is why specifically do you want to move to Drupal 7?
Are there architectural things that need to be changed in your site, in order to take advantage
of what you want from D7?
Traditional upgrade if:
• Drupal site, only one version back
• Simple site
• Few contrib modules
• End result should mirror current site
• Content is infrequently updated
• A little downtime is OK
Downtime can still be avoided, using good deployment methods.
Also, if limited time is available (and the other conditions are met).
Migrate if:
• Drupal 5 site, or even a different platform
• Complex site
• Many contrib modules
• New site needs structural changes or
enhancements

• Content is frequently updated
• Minimal downtime is very important
Conclusion (?)
• traditional upgrade
• migrate

If you want something that is quick and your site's upgrade path supports it, go with a
traditional upgrade.
If you want to make a lot of structural changes and need fine control over the upgrade path,
go with migrate.
Future of upgrades and
migrations
• Migrate is being added to Drupal 8 core, to
provide a smooth upgrade path from D6
and D7 core.

• https://groups.drupal.org/imp
• http://www.drupal4hu.com/node/381
Bookmarks
• http://drupalcode.org/project/drupal.git/
blob/refs/heads/7.x:/UPGRADE.txt
• https://drupal.org/project/drush_sup
• http://drupal.org/project/migrate
• http://drupal.org/project/migrate_d2d
• http://drupal.org/migrate
• http://drupal.org/project/coder (upgrade)
• http://drupal.org/project/hacked
• http://drupal.org/project/upgrade_status
More Bookmarks
• Making the case for the migrate module
• http://www.verbosity.ca/getting-contentdrupal-migrate-module
• BTMash articles
• http://btmash.com/article/2011-03-02/
migrating-content-part-1-users
• http://btmash.com/article/2011-03-25/
migrating-content-part-2-nodes
• http://btmash.com/article/2011-04-27/
migrating-content-part-3-nodes-your-ownfield-handlers
Thanks!

More Related Content

PDF
Drupal developers
eLuminous Technologies Pvt. Ltd.
 
ODP
Conference Migrate to Drupal 8 by Leon Cros at Drupal Developer Days 2015 in ...
Chipway
 
PPTX
Drupal 6 to Drupal 8 Migration
Ameex Technologies
 
PPTX
#D8CX: Upgrade your modules to Drupal 8 (Part 1 and 2)
Konstantin Komelin
 
PDF
Migrate to Drupal 8
Claudiu Cristea
 
PDF
Drupal Best Practices
Mukesh Agarwal
 
PPT
Are you ready for Drupal 8?
Stephanie Peugh
 
PDF
Everything You Need to Know About the Top Changes in Drupal 8
Acquia
 
Conference Migrate to Drupal 8 by Leon Cros at Drupal Developer Days 2015 in ...
Chipway
 
Drupal 6 to Drupal 8 Migration
Ameex Technologies
 
#D8CX: Upgrade your modules to Drupal 8 (Part 1 and 2)
Konstantin Komelin
 
Migrate to Drupal 8
Claudiu Cristea
 
Drupal Best Practices
Mukesh Agarwal
 
Are you ready for Drupal 8?
Stephanie Peugh
 
Everything You Need to Know About the Top Changes in Drupal 8
Acquia
 

What's hot (19)

PPTX
Top 8 Improvements in Drupal 8
Angela Byron
 
PDF
Evolution of Drupal and the Drupal community
Angela Byron
 
PDF
Yet Another Drupal Development/Deployment Presentation
digital006
 
PDF
How to Migrate Drupal 6 to Drupal 8?
DrupalGeeks
 
PPT
Taking your module from Drupal 6 to Drupal 7
Phase2
 
PDF
Drupal 6 to 7 migration guide
Ebizon
 
PDF
Upgrades and migrations
David Lanier
 
PPTX
History of Drupal: From Drop 1.0 to Drupal 8
Websolutions Agency
 
PDF
10 New Things You Can Do with Drupal 8 Out-of-the-Box
Suzanne Dergacheva
 
PDF
Speedrun: Build a Website with Panels, Media, and More in 45 Minutes
Acquia
 
PPTX
Database Migrations with Gradle and Liquibase
Dan Stine
 
PDF
Plain english guide to drupal 8 criticals
Angela Byron
 
ODP
Upgrading your site from Drupal 6 to Drupal 7
Andrew Martha
 
PPT
Taking your site from Drupal 6 to Drupal 7
Phase2
 
PDF
Blisstering drupal module development ppt v1.2
Anil Sagar
 
PPTX
Drupal 7 vs. Drupal 8: A Contrast of Multilingual Support
Acquia
 
PDF
Drupal 8 - A Brief Introduction
Jeff Geerling
 
PDF
One drupal to rule them all - Drupalcamp Caceres
hernanibf
 
Top 8 Improvements in Drupal 8
Angela Byron
 
Evolution of Drupal and the Drupal community
Angela Byron
 
Yet Another Drupal Development/Deployment Presentation
digital006
 
How to Migrate Drupal 6 to Drupal 8?
DrupalGeeks
 
Taking your module from Drupal 6 to Drupal 7
Phase2
 
Drupal 6 to 7 migration guide
Ebizon
 
Upgrades and migrations
David Lanier
 
History of Drupal: From Drop 1.0 to Drupal 8
Websolutions Agency
 
10 New Things You Can Do with Drupal 8 Out-of-the-Box
Suzanne Dergacheva
 
Speedrun: Build a Website with Panels, Media, and More in 45 Minutes
Acquia
 
Database Migrations with Gradle and Liquibase
Dan Stine
 
Plain english guide to drupal 8 criticals
Angela Byron
 
Upgrading your site from Drupal 6 to Drupal 7
Andrew Martha
 
Taking your site from Drupal 6 to Drupal 7
Phase2
 
Blisstering drupal module development ppt v1.2
Anil Sagar
 
Drupal 7 vs. Drupal 8: A Contrast of Multilingual Support
Acquia
 
Drupal 8 - A Brief Introduction
Jeff Geerling
 
One drupal to rule them all - Drupalcamp Caceres
hernanibf
 
Ad

Viewers also liked (14)

PPTX
Web Development Within your Means
Stephanie Gutowski
 
PPTX
Content Strategy in Popular Culture
MadouPDX
 
PPTX
If I Only Had a Frame(work): 2016 NTC
MadouPDX
 
PDF
It Takes Two: The Case for CRM’s in Drupal
Lev Tsypin
 
PPTX
Content Strategy 101
MadouPDX
 
PPT
People Matter Website Relaunch Before and After
Roy Harryman
 
PDF
Setting Up for Success: The Kickoff Meeting
SoCal UX Camp
 
KEY
Meet ThinkShout, Inc.
Sean Larkin
 
PPTX
Discover Discovery
MadouPDX
 
PDF
Fundraising with Drupal
Lev Tsypin
 
PPTX
Cut Through the Noise: Listen to Your Audience
MadouPDX
 
KEY
Discovery and Requirements Gathering
Sean Larkin
 
PPTX
Launching for the Web
MadouPDX
 
PDF
Sample Website Proposal Presentation
Reach China Holdings Limited
 
Web Development Within your Means
Stephanie Gutowski
 
Content Strategy in Popular Culture
MadouPDX
 
If I Only Had a Frame(work): 2016 NTC
MadouPDX
 
It Takes Two: The Case for CRM’s in Drupal
Lev Tsypin
 
Content Strategy 101
MadouPDX
 
People Matter Website Relaunch Before and After
Roy Harryman
 
Setting Up for Success: The Kickoff Meeting
SoCal UX Camp
 
Meet ThinkShout, Inc.
Sean Larkin
 
Discover Discovery
MadouPDX
 
Fundraising with Drupal
Lev Tsypin
 
Cut Through the Noise: Listen to Your Audience
MadouPDX
 
Discovery and Requirements Gathering
Sean Larkin
 
Launching for the Web
MadouPDX
 
Sample Website Proposal Presentation
Reach China Holdings Limited
 
Ad

Similar to Drupal upgrades and migrations. BAD Camp 2013 version (20)

PDF
Drupal, git and sanity
Charlie Morris
 
PDF
Drupal theming - a practical approach (European Drupal Days 2015)
Eugenio Minardi
 
PDF
Upgrading to Drupal 7
DesignHammer
 
PPT
Drupal: an Overview
Matt Weaver
 
PPTX
Resources for Navigating Drupal Upgrades: Versions 6 Through 8 And What It Me...
Steve Kessler
 
ZIP
Staging and Deployment
heyrocker
 
PDF
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
Eric Sembrat
 
PDF
Staging Drupal 8 31 09 1 3
Drupalcon Paris
 
ZIP
Building a Drupal Distribution using Features, Drush Make, Installation Profi...
Ben Shell
 
ZIP
Using Features
Alexandru Badiu
 
PDF
Creating a Reusable Drupal Website for Higher Education - Webinar
Suzanne Dergacheva
 
PPTX
One Drupal to rule them all - Drupalcamp London
hernanibf
 
PDF
Get Up and Running Quickly with Drupal Distributions
Melissa Piper
 
PDF
Upgrading to Drupal 8: Benefits and Gotchas
Suzanne Dergacheva
 
PPTX
They why behind php frameworks
Kirk Madera
 
PDF
Absolute Beginners Guide to Drupal
Rod Martin
 
PDF
Phase2 Large Drupal Multisites (gta case study)
Phase2
 
PPTX
72d5drupal
Mahesh Sherkar
 
PDF
Drupal Migrations in 2018
Pantheon
 
PDF
Intro to Drupal Module Developement
Matt Mendonca
 
Drupal, git and sanity
Charlie Morris
 
Drupal theming - a practical approach (European Drupal Days 2015)
Eugenio Minardi
 
Upgrading to Drupal 7
DesignHammer
 
Drupal: an Overview
Matt Weaver
 
Resources for Navigating Drupal Upgrades: Versions 6 Through 8 And What It Me...
Steve Kessler
 
Staging and Deployment
heyrocker
 
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
Eric Sembrat
 
Staging Drupal 8 31 09 1 3
Drupalcon Paris
 
Building a Drupal Distribution using Features, Drush Make, Installation Profi...
Ben Shell
 
Using Features
Alexandru Badiu
 
Creating a Reusable Drupal Website for Higher Education - Webinar
Suzanne Dergacheva
 
One Drupal to rule them all - Drupalcamp London
hernanibf
 
Get Up and Running Quickly with Drupal Distributions
Melissa Piper
 
Upgrading to Drupal 8: Benefits and Gotchas
Suzanne Dergacheva
 
They why behind php frameworks
Kirk Madera
 
Absolute Beginners Guide to Drupal
Rod Martin
 
Phase2 Large Drupal Multisites (gta case study)
Phase2
 
72d5drupal
Mahesh Sherkar
 
Drupal Migrations in 2018
Pantheon
 
Intro to Drupal Module Developement
Matt Mendonca
 

Recently uploaded (20)

PDF
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PDF
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
PPTX
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
PPTX
Agile Chennai 18-19 July 2025 | Emerging patterns in Agentic AI by Bharani Su...
AgileNetwork
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
PDF
Brief History of Internet - Early Days of Internet
sutharharshit158
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PDF
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PPTX
Simple and concise overview about Quantum computing..pptx
mughal641
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PDF
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PDF
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
Agile Chennai 18-19 July 2025 | Emerging patterns in Agentic AI by Bharani Su...
AgileNetwork
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
Brief History of Internet - Early Days of Internet
sutharharshit158
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
Simple and concise overview about Quantum computing..pptx
mughal641
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 

Drupal upgrades and migrations. BAD Camp 2013 version

  • 1. Upgrades and Migrations, how? David Lanier @nadavoid ThinkShout PREFACE
  • 2. Overview • Getting your Drupal 6 site onto Drupal 7 • Use traditional upgrade or migrate data to new site • Look at the benefits and drawbacks of both approaches • Primarily for people who have not gone through either process Your site is unique, so take what you find today and let it help you in your decision making. I won't be saying always do it one way. Both approaches do require work.
  • 3. An Architecture Metaphor • Changing the foundation (codebase) of your house
  • 4. Basic pieces • Codebase (core, modules, themes, libraries) • Database • Files (images, pdfs, mp3s, etc.) Files = content. Database & Files together = "data"
  • 5. Deployment • Same issues as replacing any site, unless the D6 site is incredibly simple. I won't be dwelling on this today because it is such a common task.
  • 6. Upgrade overview • Swap out the foundation, house in place. • Replace codebase, run upgrade scripts on existing data & files. • Built into core and contrib. • UI based Lift the house, swap in a new foundation, set the house down on the new foundation. The upgrade scripts essentially upgrade the plumbing and wiring to be compatible with the new foundation. UI centered, but drush can be used for most upgrades as well. 'drush updb'
  • 7. Upgrade drawbacks • Hard to get rid of legacy cruft • Field names • Content type structures • Anything else that seems old or odd
  • 8. Migrate overview • Build new house on a new foundation. • Build new site. Import data from old site. • Write custom code to define the specifics of the migration. The details of a migration must be handled by writing custom code. There is also helpful support in the UI.
  • 9. Migrate drawbacks • Very code-centric • Very granular Averse to custom coding? Maybe prefer upgrade. But Migrate isn't so hard, I promise! Granular: you generally have to specify everything (image alt, title, language, etc.). Of course, that could also be a good thing. You're in full control.
  • 10. Feeds • Best fit is to regularly import new data. • Not usually a good fit for full migrations. • Easy to learn, but it usually falls short when getting into the details, such as handling relationships and very large datasets. I really like feeds, and it can be super for importing data into Drupal. But it's just not a module I generally recommend for a full site migration.
  • 11. Initial preparation • Regular D7 system requirements (drupal.org/requirements) • Local development environment that can support several copies of the site • Reference site • Data source • Development CHAPTER 1 D7: PHP 5.3 recommended, MySQL 5. Local Dev: for testing, experimenting, practicing
  • 12. Architecture of current site • Inventory of modules, libraries, themes •drush pml | grep Enabled • Content Types, fields • Views, other configuration • Important pages, capabilities, workflows • Reference copy of the site Save lists of directories (list of modules) Save drush output Save certain pages Have a clear idea of exactly what it is you're upgrading from
  • 14. Determine upgrade path • Module to D7 options • same module (pathauto) • different module • moved into core (CCK to fields) • nothing available, so custom solution This is where most of the upgrade work will be. Be sure to check if D7 version of modules have their own dependencies. Views adds a ctools dependency. Others will likely require the libraries module.
  • 15. Determine upgrade path • Custom modules • Converting 6.x modules to 7.x: http://drupal.org/node/224333 • Coder module Any custom code will need to be updated to match the Drupal 7 API and coding standards.
  • 16. Determine upgrade path • Theme • Update or replace base theme • Update or rebuild subtheme • Upgrading 6.x themes to 7.x https://drupal.org/node/254940 A custom theme is custom code, so needs same attention.
  • 17. Prepare the source • Install a copy of the site to use as the source. • Remove all disabled or unused modules. • Update all remaining modules to their latest D6 versions.
  • 18. How to Upgrade • Practice on a copy of the site. • 3 dev sites: • Pristine copy of site for reference. • Copy of site with everything D6 updated. • Copy that is actually getting upgraded. CHAPTER 2
  • 19. Today's Example • RidePDW.com Portland Design Works • Portland company that develops bicycle accessories I experimented with an upgrade, but ended up doing a migration instead, primarily because of keeping data in sync.
  • 21. Process • Commit after each step. • Definitely after updating each module. • Include db exports, as outside files. DB Exports: if not in the repo, in their own folder.
  • 22. Upgrade core • Refer back to your list of all enabled modules • Disable all enabled contrib modules • Switch theme to Garland, including the admin theme
  • 23. Upgrade core • Use the copy of the site that you have for actually upgrading • Replace core files manually • Delete core directories & files • Add the new ones • Download Drupal, move the files into place I generally prefer to swap in the new files/folders, rather than building up a new codebase. (List of "incompatible" modules helps me know where I am)
  • 24. Update the database • Do 'drush updb' (Or use /update.php) • Watch output, observe warnings • Save output to refer back to
  • 29. Core upgrade complete! • Yay! • You're running Drupal 7 now • Commit the current state to a repo • Next step, contrib modules
  • 30. Upgrading contrib modules • Upgrade one at a time • Module's d.o page • Module's README.txt or INSTALL.txt or UPGRADE.txt • Check for special steps, instructions • Check for new dependencies Do a little research on each module before trying. Then go ahead and try. Dependencies: views needs ctools. ubercart needs rules. rules needs entity.
  • 31. Add the new code • This works: drush dl modulename • Or, delete existing, then add the new
  • 32. Where to start? • Start with the most foundational • ctools • views • Or most standalone • pathauto • devel
  • 33. Views • Replace views code • Update database • Enable the upgraded module This is the usual process. But it's still best to see the module's upgrade documentation first.
  • 37. Upgrade CCK • Download D7 version of CCK • Enable the content_migrate module • Use the UI to migrate CCK fields to drupal core fields Kind of a special case, because it's a major architectural change, bringing fields into core. Also common pattern: contrib module providing upgrade path into core.
  • 38. Available fields Provides suggestions of things to do, and notes about what it will do. Caveat: it lets you migrate fields, even if the relevant content type does not yet exist properly in the upgraded site. Should content types come before fields?
  • 41. Migrate CCK fields • Install required modules • Enable modules that define content types • Sometimes several layers of dependencies emerge • Can end up being messy and difficult to fully successfully migrate all CCK fields. dependency chain: Nodereference field is used to refer to products. Products are defined by ubercart. Ubercart requires Rules. Rules requires entity api.
  • 42. That was Upgrade • Mainly a taste of what's in store when doing an upgrade
  • 44. How to Migrate • Building a whole new house, with its own new foundation. • Then we will move all of our data into it.
  • 45. Plan and get organized • Collect data and files into a safe place, to use as a pristine, read-only source. • Make a spreadsheet or list to plan out your mapping • Build out the architecture of the new site Identify questionable or troublesome pieces, e.g. whether to keep certain fields. Build: at least content types & fields. Anything else that is needed by your migrated data.
  • 46. Set up environments • Install or get access to a reference site • Install source database • Install a built destination site • An IDE for exploring the migrate API reference site = this is how it currently is. must be inspectable.
  • 48. Start a new module • Install the migrate module • Create a new module that extends classes that are in the migrate module
  • 49. Important functions • addFieldMapping() • addSimpleMappings() • defaultValue() • sourceMigration() • addUnmigratedDestinations() • addUnmigratedSources() Just to get a flavor of what you will be using.
  • 50. Module structure • .info file: file list • .module file: specify migrations via hook_migrate_api() • Migration class files: handle the details and mappings of a migration • name: sitename_migration .info file: Mainly lists files that are used. .module file: register migrations and their classes by using hook_migrate_api(). Migration class files: I generally prefer one class per file, but there's nothing wrong with having multiple classes in one file too.
  • 51. Directory list Most basic structure that provides a functional migration. But there are many more complicated examples.
  • 55. How did you find out? • Comments in the migrate module • migrate_example module (inside migrate) • articles on btmash.com
  • 56. Additional Docs • Source code • Suggestions in IDE • Migrate handbook at drupal.org/migrate
  • 58. Migration class • Set description • Define database source • Create query to get data • Tell migrate that this query is the source of this migration • Do the mappings This is essential before you can enable your custom module without errors.
  • 64. Set up table mapping Enables migrate to map source rows to destination rows
  • 66. Enable the module List of migrations & their status. Status of mappings. There are equivalent tools in drush.
  • 70. Done
  • 71. Mapping process • Add fields as needed to the query • Add mappings until the mapping screen clear. Adding fields will usually mean adding joins.
  • 73. Mapping a reference From a ProductHelpMigration
  • 74. Self references • Handles creating references to same import • Uses a createStub function
  • 75. Mapping a file field
  • 76. Term References • Use a dependent migration • Or create as needed
  • 77. Repeats • "Update" completely overwrites • Highwater mark In addition to rollback and reimport. highwater mark, important for bringing in added content. brings in any new items with a greater value of highwater than last recorded. No other comparisons. (no import "changed")
  • 78. Manipulating source data • prepareRow() function Looking up a value for 'weight_units' from another table.
  • 79. migrate_extras • Provides support for many contrib modules • Addressfield, entity api, more • Excellent examples of custom handlers
  • 80. migrate_d2d • Current stable version (2.0) • Ends up being somewhat cumbersome. • Dev version (2.1-beta1) • Looks very promising Not migrate_d2d 2.0: - complicated things for me as a newcomer to the migrate framework. - Added too many layers and did not streamline things for me. - Had to unmap many things that it automatically mapped for me.
  • 81. migrate_d2d 2.1 • Provides migration setup wizard • Provides UI for field mapping • Requires 2.6 version of Migrate module, which is also still in development
  • 94. migrate_d2d drawbacks • Still really new (alpha/beta/dev status) • Making changes to initial settings overwrites existing migrate configuration • Cannot (yet) export configuration • drupal.org/node/1983404 • Uncertain how to add regular migrate code to what is done in the UI • drupal.org/node/2118243 Making changes, such as database credentials or adding a content type. Regular programmatic code = prepareRow, anything that the UI doesn't provide but is available in the API.
  • 95. Migrate • Showed important parts • There's a LOT more there
  • 96. QA. Did it work? • Regardless whether upgrade or migrate • Have someone else check your work • Have the client check your work • Pass any existing acceptance tests SIDEBAR Make certain. This will be the content of the next version of this site.
  • 97. QA Questions • Correct content? • Correct versions of content? • Complete number of fields? • Complete metadata? (urls, relations, dates, authors, tags) • Complete number of nodes? • Images and media? (block live site)
  • 98. Which way do I go? • WHY do you want to go? CHAPTER 4 First thing to think about is why specifically do you want to move to Drupal 7? Are there architectural things that need to be changed in your site, in order to take advantage of what you want from D7?
  • 99. Traditional upgrade if: • Drupal site, only one version back • Simple site • Few contrib modules • End result should mirror current site • Content is infrequently updated • A little downtime is OK Downtime can still be avoided, using good deployment methods. Also, if limited time is available (and the other conditions are met).
  • 100. Migrate if: • Drupal 5 site, or even a different platform • Complex site • Many contrib modules • New site needs structural changes or enhancements • Content is frequently updated • Minimal downtime is very important
  • 101. Conclusion (?) • traditional upgrade • migrate If you want something that is quick and your site's upgrade path supports it, go with a traditional upgrade. If you want to make a lot of structural changes and need fine control over the upgrade path, go with migrate.
  • 102. Future of upgrades and migrations • Migrate is being added to Drupal 8 core, to provide a smooth upgrade path from D6 and D7 core. • https://groups.drupal.org/imp • http://www.drupal4hu.com/node/381
  • 103. Bookmarks • http://drupalcode.org/project/drupal.git/ blob/refs/heads/7.x:/UPGRADE.txt • https://drupal.org/project/drush_sup • http://drupal.org/project/migrate • http://drupal.org/project/migrate_d2d • http://drupal.org/migrate • http://drupal.org/project/coder (upgrade) • http://drupal.org/project/hacked • http://drupal.org/project/upgrade_status
  • 104. More Bookmarks • Making the case for the migrate module • http://www.verbosity.ca/getting-contentdrupal-migrate-module • BTMash articles • http://btmash.com/article/2011-03-02/ migrating-content-part-1-users • http://btmash.com/article/2011-03-25/ migrating-content-part-2-nodes • http://btmash.com/article/2011-04-27/ migrating-content-part-3-nodes-your-ownfield-handlers