SlideShare une entreprise Scribd logo
1  sur  74
Télécharger pour lire hors ligne
Migrate all the things!
Better Drupal workflows, using Migrate
1
Dave Vasilevsky
vasi@evolvingweb.ca
twitter.com/djvasi
@vasi on drupal.org, github
About me
• Doing Drupal since 2008
• Love open source and the Drupal community
• Contributor to Migrate in core (eg: multilingual nodes in D6
→ D8 upgrades
2
Our specialties
Multilingual Solr search Testing
Custom Drupal
applications
Responsive themes
and of course…
Migrate
3
• Drupal development, consulting and training since 2007
• Based in Montreal, clients all over Canada and USA
• Very involved in the Drupal community
http://evolvingweb.ca
Once upon a time…
5
Once upon a time…
6
“We’re going to save some money. You just
build the site—we’ll add all the content
ourselves.”
- The Client
Once upon a time…
7
A beautiful site, only missing content
Once upon a time…
8
And then content happens.
Once upon a time…
9
• Bodies that are only images or tables
• Relationships or tags that weren’t identified
• Much shorter or longer text than expected
• Many more or fewer nodes than expected
So many things can go wrong!
A solution
10
Gather client data in a spreadsheet, import it into Drupal
Title Body
About Evolving Web is a Montreal-based team of Drupal experts…
Careers
If you're interested in working at Evolving Web, please fill out
the form below…
Projects
We work with clients in a wide variety of sectors, including
health care, tourism…
A solution
• Force client to actually write content quickly, improves
likelihood of launch on-time
• Client can use tools they know, even without Drupal
training
• Can check if IA is correct, and adjust before it’s too late
• Each developer can import data on their own computer
11
What we gain
Migrate?
• Yes, it’s about migrate. So what’s migrate?
12
Migrate?
• Yes, it’s about migrate. So what’s migrate?
• A system that allows importing structured data into Drupal, usually as
entities: nodes, users, terms…
• Data can come from many different places: DB, CSV, XML…
• Very extensible
• Included in Drupal 8 core (experimental)
• What is migrate not?
13
Migrate?
• There’s already lots of info about what migrations are, how
to write a migration:
• Michael Anello at DCNJ 2017: http://tiny.cc/
ultimikeMigrate
• Evolving Web blog series: http://tiny.cc/ewMigrate
• These aren’t the focus of the talk
14
Migrate?
• This talk isn’t just about how to start. More about why and
when.
• Common impression is that migrate is only for:
15
Migrate?
• This talk isn’t just about how to start. More about why and
when.
• Common impression is that migrate is only for:
• Upgrades from D6/D7 to Drupal 8
16
Migrate?
• This talk isn’t just about how to start. More about why and
when.
• Common impression is that migrate is only for:
• Upgrades from D6/D7 to Drupal 8
• Moving from legacy sites to Drupal
17
Migrate?
• This talk isn’t just about how to start. More about why and
when.
• Common impression is that migrate is only for:
• Upgrades from D6/D7 to Drupal 8
• Moving from legacy sites to Drupal
18
Migrate?
• But there are also many new content workflows that migrate
enables
• So don’t just migrate things that feel like migrations—
migrate all the things
19
Migrate?
• But there are also many new content workflows that migrate
enables
• So don’t just migrate things that feel like migrations—
migrate all many of the things
20
Workflow: Content First
21
Implementation
The parts of migrate
22
Source Destination
Process
The parts of migrate
23
Source Destination
Process
CSV
File
First Last Job
Dave Vasilevsky Backend
Jorge Diaz Frontend
Alex Dergachev Marketing
The parts of migrate
24
Source Destination
Process
CSV
File
Users
First Last Job
Dave Vasilevsky Backend
Jorge Diaz Frontend
Alex Dergachev Marketing
name field_job
Dave Vasilevsky Backend
Jorge Diaz Frontend
Alex Dergachev Marketing
The parts of migrate
25
Source Destination
Process
CSV
File
Users
First Last Job
Dave Vasilevsky Backend
Jorge Diaz Frontend
Alex Dergachev Marketing
name field_job
Dave Vasilevsky Backend
Jorge Diaz Frontend
Alex Dergachev Marketing
First
Last
Job field_job
name
The parts of migrate
• migrate_plus: Allows a migration to be defined with
YAML config file
• ‘Migration’: Definition of source + process + destination
• migrate_tools: Allows running migrations using drush
26
Contrib modules
27
id: test
label: Test CSV migration
source:
plugin: csv
path: public://test.csv
header_row_count: 1
keys: [Title]
destination:
plugin: entity:node
default_bundle: page
process:
title: Title
body: Body
test.csv migrate_plus.migration.test.yml
Title Body
About Evolving Web…
Careers If you're interested…
Projects We work with…
28
id: test
label: Test CSV migration
source:
plugin: csv
path: public://test.csv
header_row_count: 1
keys: [Title]
destination:
plugin: entity:node
default_bundle: page
process:
title: Title
body: Body
test.csv migrate_plus.migration.test.yml
Title Body
About Evolving Web…
Careers If you're interested…
Projects We work with…
29
id: test
label: Test CSV migration
source:
plugin: csv
path: public://test.csv
header_row_count: 1
keys: [Title]
destination:
plugin: entity:node
default_bundle: page
process:
title: Title
body: Body
test.csv migrate_plus.migration.test.yml
Title Body
About Evolving Web…
Careers If you're interested…
Projects We work with…
30
id: test
label: Test CSV migration
source:
plugin: csv
path: public://test.csv
header_row_count: 1
keys: [Title]
destination:
plugin: entity:node
default_bundle: page
process:
title: Title
body: Body
test.csv migrate_plus.migration.test.yml
Title Body
About Evolving Web…
Careers If you're interested…
Projects We work with…
A solution
• Force client to actually write content quickly, improves
likelihood of launch on-time
• Client can use tools they know, even without Drupal training
• Can check if IA is correct, and adjust before it’s too late
• Each developer can import data on their own computer. No
database sharing!
31
What we gain
Workflow: Content First
• Only migrate when it’s worth it
• Spreadsheets are too simple
• Images are hard
• Related content is hard
32
⚠ DANGER ⚠
Workflow: Content first, in Drupal
• Drupal has great content management UI
• Rich text editor
• Images
• References
• Don’t need complete theme and behaviour to create content, just
content type definitions
33
Workflow: Content first, in Drupal
• Provide client a content staging site
• They can build all the content there
• Migrate it into Drupal, just like before
• Same advantages of “Content first” workflow
34
Workflow: Content first, in Drupal
35
REST module to export content as JSON
[
{
"title": "My node",
"path": "/node/1",
"body": "<p>This is a sample
node.</p>n"
},
{
"title": "Another node",
...
},
...
]
Workflow: Content first, in Drupal
36
Relationships
Company
Evolving Web
IBM
Apple
User Company
Dave
Evolving
Web
Jorge
Evolving
Web
Employee: Dave
nid: 9
Employee: Jorge
nid: 10
Company: EW
nid: 3
3
3
Workflow: Drupal for content gathering
• Migrate supports more complex
mappings: “process plugins”
• There’s a list of ones in core:
https://www.drupal.org/docs/8/
api/migrate-api/migrate-process
37
Relationships
process:
field_name:
plugin: concat
delimiter: “ “
source:
- firstname
- lastname
Workflow: Content first, in Drupal
38
Relationships
Company
Evolving Web
IBM
Apple
User Company
Dave
Evolving
Web
Jorge
Evolving
Web
process:
field_employer:
plugin: migration
source: employer
migration: companies
Workflow: Content first, in Drupal
• Users can gather complex content, early
• Use polished Drupal UI to do so
39
What we gain
Workflow: Content first, in Drupal
• Authentication: Shield + migrate_plus
• Translations: Two migrations
• No built-in export: Menus, custom blocks
40
Complications
Workflow: Content first, in Drupal
• Site doesn’t look pretty
• Once the IA is nailed down—stop!
41
⚠ DANGER ⚠
Workflow: Mirror
• External tool may be better than Drupal for managing certain
content. Eg:
• Membership management system
• Image management systems
• Tools specific to data type, like course catalog
• Manage data with external system
• Keep Drupal in sync
42
Workflow: Mirror
Rendering
Logic
Permissions
Content
Workflow: Mirror
Rendering
Logic
Permissions
Content
Workflow: Mirror
Logic
Permissions
Content
Headless
Drupal
Workflow: Mirror
Rendering
Logic
Permissions
Workflow: Mirror
Rendering
Logic
Permissions
Footless
Drupal?
Workflow: Mirror
• Update what’s changed, and only what’s changed
• Delete entities that are no longer in source
• Trigger without drush
• Make it hard to make mistakes
48
Recurring migrations
Workflow: Mirror
• Only update what’s changed: incremental migration
49
source:
track_changes: true
Workflow: Mirror
• Trigger on cron, or via UI
50
Triggering migrations without drush
$migration_manager = Drupal::service('plugin.manager.config_entity_migration');
$migration = $migration_manager->createInstance('my_migration');
$executable = new MigrateExecutable($migration, new MigrateMessage());
$executable->import();
Workflow: Mirror
• If users are uploading data files, we need to tell migrate about
them.
51
Dynamic source
$path = $form_state->getValue(['source', 0])->getFileUri();
$source = $migration->getSourceConfiguration();
$source['path'] = $path;
$migration->set('source', $source);
Workflow: Mirror
• Users want to know what’s about to happen, check if it’s expected
• We can look at the Migrate source object, and check what’s new/updated/
deleted: http://tiny.cc/migrateDryRun
52
Dry run
term$ drush scr dry_run.php
UPDATED: 2
UPDATED: 4
NEW: 5
DELETED: 3
Workflow: Mirror
• In core, migrate will never delete items that have been
removed from source.
• But now we know what needs deletion, so we can add a hook to
do that too.
• BE CAREFUL! Validate your data
53
Delete
Workflow: Mirror
• migrate_devel module will print every row before migrating it
• Look at migrate_map_foo and migrate_message_foo DB tables
• Use XDebug and step through!
54
Debugging
Workflow: Mirror
• Use the right tool for the right job: Data can live in external
tool if it’s better for the job
• Don’t need to write any weird integrations (eg:
external_entities)
55
What we gain
Workflow: Mirror
• Validate your data!
• Data will be overwritten
• Never do bidirectional sync. It will break.
56
⚠ DANGER ⚠
Workflow: Content in git
• Example of an external system: Markdown files in a git repo
57
Workflow: Content in git
• In Drupal 8, almost everything is just a plugin
• That goes for Migrate sources and process plugins too
• They’re pretty well-designed, don’t be afraid to write one
58
Getting all the files
/**
* @MigrateSource(
* id = "markdown"
* )
*/
class Markdown extends SourcePluginBase {
public function initializeIterator() {
$found = file_scan_directory($this->configuration['path'], '/.md$/');
foreach ($found as $item) {
yield (array) $item;
}
}
public function __toString() {
return $this->configuration['path'];
}
public function fields() {
return ['uri' => $this->t('URI')];
}
public function getIds() {
return ['uri' => ['type' => 'string']];
}
}
Workflow: Content in git
• Our client kept a hierarchical YAML file, to turn into a menu
• But migrate wants a list of rows, not a tree!
• RecursiveIteratorIterator makes this simple: http://
tiny.cc/RecIterIter
60
Source data can be weird
Workflow: Content in git
• Catch problems early: Check the resulting entities, see if
they make sense
• Are there broken links? Orphan nodes, without a menu
item?
• Compare generated test site with Drupal: https://
github.com/evolvingweb/sitediff
61
Validation
Workflow: Content in git
• Best tools for the job
• Git comes with: branches, merging, global ID, blame…
• Can use whichever Markdown editor they like
• Can revert to earlier version of site!
62
What we gain
Workflow: Partial upgrades
• A D6/7 to D8 upgrade normally upgrades complete config/
content
• This leaves cruft, eg; obsolete fields
• Things have changed in ten years! You probably want new
content
• Building the new site from scratch means rewriting all your
content
63
Workflow: Partial upgrades
• Build upgraded site from scratch, using new best-practices
• But keep some content. Only what you need!
64
Workflow: Partial upgrades
65
There’s a shortcut!
term$ drush migrate-upgrade --configure-only —legacy-db-url=mysql://localhost/test
Exporting d7_dblog_settings as upgrade_d7_dblog_settings
Exporting d7_filter_format as upgrade_d7_filter_format
Exporting d7_filter_settings as upgrade_d7_filter_settings
Exporting d7_global_theme_settings as upgrade_d7_global_theme_settings
Exporting d7_image_settings as upgrade_d7_image_settings
Exporting d7_image_styles as upgrade_d7_image_styles
Exporting d7_language_types as upgrade_d7_language_types
Exporting d7_node_settings as upgrade_d7_node_settings
...
Workflow: Partial upgrades
• Export config, delete almost all the migrations.
• Only keep what you want to save, eg:
• Some content types: upgrade_d7_node_page
• Tags: upgrade_d7_taxonomy_term_tags
• These contain everything you need to migrate those types, even the hard
parts of the migration
• Modify as needed.
• Eg: If you don’t migrate users, don’t keep the uid in the migrations
66
Workflow: Partial upgrades
• The D6/7 to D8 migrations include every file on the site.
Could be many GBs!
• It can be worth only keeping the ones referred to by content
you’re keeping:
• http://tiny.cc/migrateFilterFiles
67
Filtering files
Workflow: Partial upgrades
• URLs that break hurt SEO a lot
• Keep the URL alias migration. Migrate redirects as well.
• Since you’re throwing out some content, some links will die
• Have a plan for adding redirects
• Check your site afterwards for broken links
• Proactive: Sitediff https://github.com/evolvingweb/sitediff
• Reactive: Google Webmaster Tools
68
Broken links
Workflow: Partial upgrades
• Keep the content that’s worth keeping
• Keep URLs working
• Throw out the junk, build a beautiful new site
• Can merge data, as long as there are no shared references
69
What we gain
What you just saw
• Intro to migrate
• Workflows
• Content first
• Content first, in Drupal
• Mirror
• Content in git
• Partial upgrades
70
What you just saw
Migrate can improve your content workflow!
71
What to do now
• Find me on Twitter @djvasi
• Learn more about migrate
• Try out these content workflows
72
What to do now
• Public: Chicago, Montreal, Toronto, NJ,
NYC
• Private: Health Canada, McGill
University, remote
• For new content editors, new
developers, teams starting on D8…
73
Evolving Web training
What to do now
• Anything I got wrong?
• Any new ideas I should look into?
• How should migrate evolve?
74
Ask me questions!

Contenu connexe

Similaire à Migrate all the things!

MIGRATION - PAIN OR GAIN?
MIGRATION - PAIN OR GAIN?MIGRATION - PAIN OR GAIN?
MIGRATION - PAIN OR GAIN?DrupalCamp Kyiv
 
Drupal 8 deeper dive
Drupal 8 deeper diveDrupal 8 deeper dive
Drupal 8 deeper diveAmazee Labs
 
Introduction to Drupal
Introduction to DrupalIntroduction to Drupal
Introduction to DrupalTom Deryckere
 
Drupal 8 Initiatives
Drupal 8 InitiativesDrupal 8 Initiatives
Drupal 8 InitiativesAngela Byron
 
Upgrading to Drupal 7
Upgrading to Drupal 7Upgrading to Drupal 7
Upgrading to Drupal 7DesignHammer
 
Drupal 8 - Build Week Update
Drupal 8 - Build Week UpdateDrupal 8 - Build Week Update
Drupal 8 - Build Week UpdateAngela Byron
 
Drupal upgrades and migrations. BAD Camp 2013 version
Drupal upgrades and migrations. BAD Camp 2013 versionDrupal upgrades and migrations. BAD Camp 2013 version
Drupal upgrades and migrations. BAD Camp 2013 versionDavid Lanier
 
Staging and Deployment
Staging and DeploymentStaging and Deployment
Staging and Deploymentheyrocker
 
Spark: Authoring Experience++ in Drupal 7, 8, and Beyond
Spark: Authoring Experience++ in Drupal 7, 8, and BeyondSpark: Authoring Experience++ in Drupal 7, 8, and Beyond
Spark: Authoring Experience++ in Drupal 7, 8, and BeyondAngela Byron
 
Getting Started with Drupal
Getting Started with DrupalGetting Started with Drupal
Getting Started with DrupalPantheon
 
Drupal 8 introduction
Drupal 8 introductionDrupal 8 introduction
Drupal 8 introductionAditya Ghan
 
Dev ops lessons learned - Michael Collins
Dev ops lessons learned  - Michael CollinsDev ops lessons learned  - Michael Collins
Dev ops lessons learned - Michael CollinsDevopsdays
 
Migrate for Site Builders from MidCamp 2016
Migrate for Site Builders from MidCamp 2016Migrate for Site Builders from MidCamp 2016
Migrate for Site Builders from MidCamp 2016Suzanne Dergacheva
 
Things Every Oracle DBA Needs to Know about the Hadoop Ecosystem
Things Every Oracle DBA Needs to Know about the Hadoop EcosystemThings Every Oracle DBA Needs to Know about the Hadoop Ecosystem
Things Every Oracle DBA Needs to Know about the Hadoop EcosystemZohar Elkayam
 
Everything You Need to Know About the Top Changes in Drupal 8
Everything You Need to Know About the Top Changes in Drupal 8Everything You Need to Know About the Top Changes in Drupal 8
Everything You Need to Know About the Top Changes in Drupal 8Acquia
 
Creating a Documentation Portal
Creating a Documentation PortalCreating a Documentation Portal
Creating a Documentation PortalSteve Anderson
 
Software Development: Beyond Training wheels
Software Development: Beyond Training wheelsSoftware Development: Beyond Training wheels
Software Development: Beyond Training wheelsNaveenkumar Muguda
 
Drupal at-embl-ebi gmod
Drupal at-embl-ebi gmodDrupal at-embl-ebi gmod
Drupal at-embl-ebi gmodjosephrossetto
 

Similaire à Migrate all the things! (20)

MIGRATION - PAIN OR GAIN?
MIGRATION - PAIN OR GAIN?MIGRATION - PAIN OR GAIN?
MIGRATION - PAIN OR GAIN?
 
Drupal 8 deeper dive
Drupal 8 deeper diveDrupal 8 deeper dive
Drupal 8 deeper dive
 
Introduction to Drupal
Introduction to DrupalIntroduction to Drupal
Introduction to Drupal
 
Drupal 8 Initiatives
Drupal 8 InitiativesDrupal 8 Initiatives
Drupal 8 Initiatives
 
Upgrading to Drupal 7
Upgrading to Drupal 7Upgrading to Drupal 7
Upgrading to Drupal 7
 
Drupal 8 - Build Week Update
Drupal 8 - Build Week UpdateDrupal 8 - Build Week Update
Drupal 8 - Build Week Update
 
Drupal upgrades and migrations. BAD Camp 2013 version
Drupal upgrades and migrations. BAD Camp 2013 versionDrupal upgrades and migrations. BAD Camp 2013 version
Drupal upgrades and migrations. BAD Camp 2013 version
 
Staging and Deployment
Staging and DeploymentStaging and Deployment
Staging and Deployment
 
Spark: Authoring Experience++ in Drupal 7, 8, and Beyond
Spark: Authoring Experience++ in Drupal 7, 8, and BeyondSpark: Authoring Experience++ in Drupal 7, 8, and Beyond
Spark: Authoring Experience++ in Drupal 7, 8, and Beyond
 
Drupal intro
Drupal introDrupal intro
Drupal intro
 
Getting Started with Drupal
Getting Started with DrupalGetting Started with Drupal
Getting Started with Drupal
 
Drupal intro
Drupal introDrupal intro
Drupal intro
 
Drupal 8 introduction
Drupal 8 introductionDrupal 8 introduction
Drupal 8 introduction
 
Dev ops lessons learned - Michael Collins
Dev ops lessons learned  - Michael CollinsDev ops lessons learned  - Michael Collins
Dev ops lessons learned - Michael Collins
 
Migrate for Site Builders from MidCamp 2016
Migrate for Site Builders from MidCamp 2016Migrate for Site Builders from MidCamp 2016
Migrate for Site Builders from MidCamp 2016
 
Things Every Oracle DBA Needs to Know about the Hadoop Ecosystem
Things Every Oracle DBA Needs to Know about the Hadoop EcosystemThings Every Oracle DBA Needs to Know about the Hadoop Ecosystem
Things Every Oracle DBA Needs to Know about the Hadoop Ecosystem
 
Everything You Need to Know About the Top Changes in Drupal 8
Everything You Need to Know About the Top Changes in Drupal 8Everything You Need to Know About the Top Changes in Drupal 8
Everything You Need to Know About the Top Changes in Drupal 8
 
Creating a Documentation Portal
Creating a Documentation PortalCreating a Documentation Portal
Creating a Documentation Portal
 
Software Development: Beyond Training wheels
Software Development: Beyond Training wheelsSoftware Development: Beyond Training wheels
Software Development: Beyond Training wheels
 
Drupal at-embl-ebi gmod
Drupal at-embl-ebi gmodDrupal at-embl-ebi gmod
Drupal at-embl-ebi gmod
 

Dernier

WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)Delhi Call girls
 
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...Neha Pandey
 
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...nilamkumrai
 
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋nirzagarg
 
Microsoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck MicrosoftMicrosoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck MicrosoftAanSulistiyo
 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...singhpriety023
 
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...Escorts Call Girls
 
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...SUHANI PANDEY
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLimonikaupta
 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirtrahman018755
 
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...roncy bisnoi
 
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtrahman018755
 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...SUHANI PANDEY
 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableSeo
 
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...SUHANI PANDEY
 
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Delhi Call girls
 
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort ServiceBusty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort ServiceDelhi Call girls
 

Dernier (20)

WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
 
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
 
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
 
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
 
Microsoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck MicrosoftMicrosoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck Microsoft
 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
 
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
 
Russian Call Girls in %(+971524965298 )# Call Girls in Dubai
Russian Call Girls in %(+971524965298  )#  Call Girls in DubaiRussian Call Girls in %(+971524965298  )#  Call Girls in Dubai
Russian Call Girls in %(+971524965298 )# Call Girls in Dubai
 
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
 
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirt
 
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
 
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
 
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
 
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
 
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort ServiceBusty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
 

Migrate all the things!

  • 1. Migrate all the things! Better Drupal workflows, using Migrate 1 Dave Vasilevsky vasi@evolvingweb.ca twitter.com/djvasi @vasi on drupal.org, github
  • 2. About me • Doing Drupal since 2008 • Love open source and the Drupal community • Contributor to Migrate in core (eg: multilingual nodes in D6 → D8 upgrades 2
  • 3. Our specialties Multilingual Solr search Testing Custom Drupal applications Responsive themes and of course… Migrate 3 • Drupal development, consulting and training since 2007 • Based in Montreal, clients all over Canada and USA • Very involved in the Drupal community http://evolvingweb.ca
  • 4.
  • 5. Once upon a time… 5
  • 6. Once upon a time… 6 “We’re going to save some money. You just build the site—we’ll add all the content ourselves.” - The Client
  • 7. Once upon a time… 7 A beautiful site, only missing content
  • 8. Once upon a time… 8 And then content happens.
  • 9. Once upon a time… 9 • Bodies that are only images or tables • Relationships or tags that weren’t identified • Much shorter or longer text than expected • Many more or fewer nodes than expected So many things can go wrong!
  • 10. A solution 10 Gather client data in a spreadsheet, import it into Drupal Title Body About Evolving Web is a Montreal-based team of Drupal experts… Careers If you're interested in working at Evolving Web, please fill out the form below… Projects We work with clients in a wide variety of sectors, including health care, tourism…
  • 11. A solution • Force client to actually write content quickly, improves likelihood of launch on-time • Client can use tools they know, even without Drupal training • Can check if IA is correct, and adjust before it’s too late • Each developer can import data on their own computer 11 What we gain
  • 12. Migrate? • Yes, it’s about migrate. So what’s migrate? 12
  • 13. Migrate? • Yes, it’s about migrate. So what’s migrate? • A system that allows importing structured data into Drupal, usually as entities: nodes, users, terms… • Data can come from many different places: DB, CSV, XML… • Very extensible • Included in Drupal 8 core (experimental) • What is migrate not? 13
  • 14. Migrate? • There’s already lots of info about what migrations are, how to write a migration: • Michael Anello at DCNJ 2017: http://tiny.cc/ ultimikeMigrate • Evolving Web blog series: http://tiny.cc/ewMigrate • These aren’t the focus of the talk 14
  • 15. Migrate? • This talk isn’t just about how to start. More about why and when. • Common impression is that migrate is only for: 15
  • 16. Migrate? • This talk isn’t just about how to start. More about why and when. • Common impression is that migrate is only for: • Upgrades from D6/D7 to Drupal 8 16
  • 17. Migrate? • This talk isn’t just about how to start. More about why and when. • Common impression is that migrate is only for: • Upgrades from D6/D7 to Drupal 8 • Moving from legacy sites to Drupal 17
  • 18. Migrate? • This talk isn’t just about how to start. More about why and when. • Common impression is that migrate is only for: • Upgrades from D6/D7 to Drupal 8 • Moving from legacy sites to Drupal 18
  • 19. Migrate? • But there are also many new content workflows that migrate enables • So don’t just migrate things that feel like migrations— migrate all the things 19
  • 20. Migrate? • But there are also many new content workflows that migrate enables • So don’t just migrate things that feel like migrations— migrate all many of the things 20
  • 22. The parts of migrate 22 Source Destination Process
  • 23. The parts of migrate 23 Source Destination Process CSV File First Last Job Dave Vasilevsky Backend Jorge Diaz Frontend Alex Dergachev Marketing
  • 24. The parts of migrate 24 Source Destination Process CSV File Users First Last Job Dave Vasilevsky Backend Jorge Diaz Frontend Alex Dergachev Marketing name field_job Dave Vasilevsky Backend Jorge Diaz Frontend Alex Dergachev Marketing
  • 25. The parts of migrate 25 Source Destination Process CSV File Users First Last Job Dave Vasilevsky Backend Jorge Diaz Frontend Alex Dergachev Marketing name field_job Dave Vasilevsky Backend Jorge Diaz Frontend Alex Dergachev Marketing First Last Job field_job name
  • 26. The parts of migrate • migrate_plus: Allows a migration to be defined with YAML config file • ‘Migration’: Definition of source + process + destination • migrate_tools: Allows running migrations using drush 26 Contrib modules
  • 27. 27 id: test label: Test CSV migration source: plugin: csv path: public://test.csv header_row_count: 1 keys: [Title] destination: plugin: entity:node default_bundle: page process: title: Title body: Body test.csv migrate_plus.migration.test.yml Title Body About Evolving Web… Careers If you're interested… Projects We work with…
  • 28. 28 id: test label: Test CSV migration source: plugin: csv path: public://test.csv header_row_count: 1 keys: [Title] destination: plugin: entity:node default_bundle: page process: title: Title body: Body test.csv migrate_plus.migration.test.yml Title Body About Evolving Web… Careers If you're interested… Projects We work with…
  • 29. 29 id: test label: Test CSV migration source: plugin: csv path: public://test.csv header_row_count: 1 keys: [Title] destination: plugin: entity:node default_bundle: page process: title: Title body: Body test.csv migrate_plus.migration.test.yml Title Body About Evolving Web… Careers If you're interested… Projects We work with…
  • 30. 30 id: test label: Test CSV migration source: plugin: csv path: public://test.csv header_row_count: 1 keys: [Title] destination: plugin: entity:node default_bundle: page process: title: Title body: Body test.csv migrate_plus.migration.test.yml Title Body About Evolving Web… Careers If you're interested… Projects We work with…
  • 31. A solution • Force client to actually write content quickly, improves likelihood of launch on-time • Client can use tools they know, even without Drupal training • Can check if IA is correct, and adjust before it’s too late • Each developer can import data on their own computer. No database sharing! 31 What we gain
  • 32. Workflow: Content First • Only migrate when it’s worth it • Spreadsheets are too simple • Images are hard • Related content is hard 32 ⚠ DANGER ⚠
  • 33. Workflow: Content first, in Drupal • Drupal has great content management UI • Rich text editor • Images • References • Don’t need complete theme and behaviour to create content, just content type definitions 33
  • 34. Workflow: Content first, in Drupal • Provide client a content staging site • They can build all the content there • Migrate it into Drupal, just like before • Same advantages of “Content first” workflow 34
  • 35. Workflow: Content first, in Drupal 35 REST module to export content as JSON [ { "title": "My node", "path": "/node/1", "body": "<p>This is a sample node.</p>n" }, { "title": "Another node", ... }, ... ]
  • 36. Workflow: Content first, in Drupal 36 Relationships Company Evolving Web IBM Apple User Company Dave Evolving Web Jorge Evolving Web Employee: Dave nid: 9 Employee: Jorge nid: 10 Company: EW nid: 3 3 3
  • 37. Workflow: Drupal for content gathering • Migrate supports more complex mappings: “process plugins” • There’s a list of ones in core: https://www.drupal.org/docs/8/ api/migrate-api/migrate-process 37 Relationships process: field_name: plugin: concat delimiter: “ “ source: - firstname - lastname
  • 38. Workflow: Content first, in Drupal 38 Relationships Company Evolving Web IBM Apple User Company Dave Evolving Web Jorge Evolving Web process: field_employer: plugin: migration source: employer migration: companies
  • 39. Workflow: Content first, in Drupal • Users can gather complex content, early • Use polished Drupal UI to do so 39 What we gain
  • 40. Workflow: Content first, in Drupal • Authentication: Shield + migrate_plus • Translations: Two migrations • No built-in export: Menus, custom blocks 40 Complications
  • 41. Workflow: Content first, in Drupal • Site doesn’t look pretty • Once the IA is nailed down—stop! 41 ⚠ DANGER ⚠
  • 42. Workflow: Mirror • External tool may be better than Drupal for managing certain content. Eg: • Membership management system • Image management systems • Tools specific to data type, like course catalog • Manage data with external system • Keep Drupal in sync 42
  • 48. Workflow: Mirror • Update what’s changed, and only what’s changed • Delete entities that are no longer in source • Trigger without drush • Make it hard to make mistakes 48 Recurring migrations
  • 49. Workflow: Mirror • Only update what’s changed: incremental migration 49 source: track_changes: true
  • 50. Workflow: Mirror • Trigger on cron, or via UI 50 Triggering migrations without drush $migration_manager = Drupal::service('plugin.manager.config_entity_migration'); $migration = $migration_manager->createInstance('my_migration'); $executable = new MigrateExecutable($migration, new MigrateMessage()); $executable->import();
  • 51. Workflow: Mirror • If users are uploading data files, we need to tell migrate about them. 51 Dynamic source $path = $form_state->getValue(['source', 0])->getFileUri(); $source = $migration->getSourceConfiguration(); $source['path'] = $path; $migration->set('source', $source);
  • 52. Workflow: Mirror • Users want to know what’s about to happen, check if it’s expected • We can look at the Migrate source object, and check what’s new/updated/ deleted: http://tiny.cc/migrateDryRun 52 Dry run term$ drush scr dry_run.php UPDATED: 2 UPDATED: 4 NEW: 5 DELETED: 3
  • 53. Workflow: Mirror • In core, migrate will never delete items that have been removed from source. • But now we know what needs deletion, so we can add a hook to do that too. • BE CAREFUL! Validate your data 53 Delete
  • 54. Workflow: Mirror • migrate_devel module will print every row before migrating it • Look at migrate_map_foo and migrate_message_foo DB tables • Use XDebug and step through! 54 Debugging
  • 55. Workflow: Mirror • Use the right tool for the right job: Data can live in external tool if it’s better for the job • Don’t need to write any weird integrations (eg: external_entities) 55 What we gain
  • 56. Workflow: Mirror • Validate your data! • Data will be overwritten • Never do bidirectional sync. It will break. 56 ⚠ DANGER ⚠
  • 57. Workflow: Content in git • Example of an external system: Markdown files in a git repo 57
  • 58. Workflow: Content in git • In Drupal 8, almost everything is just a plugin • That goes for Migrate sources and process plugins too • They’re pretty well-designed, don’t be afraid to write one 58 Getting all the files
  • 59. /** * @MigrateSource( * id = "markdown" * ) */ class Markdown extends SourcePluginBase { public function initializeIterator() { $found = file_scan_directory($this->configuration['path'], '/.md$/'); foreach ($found as $item) { yield (array) $item; } } public function __toString() { return $this->configuration['path']; } public function fields() { return ['uri' => $this->t('URI')]; } public function getIds() { return ['uri' => ['type' => 'string']]; } }
  • 60. Workflow: Content in git • Our client kept a hierarchical YAML file, to turn into a menu • But migrate wants a list of rows, not a tree! • RecursiveIteratorIterator makes this simple: http:// tiny.cc/RecIterIter 60 Source data can be weird
  • 61. Workflow: Content in git • Catch problems early: Check the resulting entities, see if they make sense • Are there broken links? Orphan nodes, without a menu item? • Compare generated test site with Drupal: https:// github.com/evolvingweb/sitediff 61 Validation
  • 62. Workflow: Content in git • Best tools for the job • Git comes with: branches, merging, global ID, blame… • Can use whichever Markdown editor they like • Can revert to earlier version of site! 62 What we gain
  • 63. Workflow: Partial upgrades • A D6/7 to D8 upgrade normally upgrades complete config/ content • This leaves cruft, eg; obsolete fields • Things have changed in ten years! You probably want new content • Building the new site from scratch means rewriting all your content 63
  • 64. Workflow: Partial upgrades • Build upgraded site from scratch, using new best-practices • But keep some content. Only what you need! 64
  • 65. Workflow: Partial upgrades 65 There’s a shortcut! term$ drush migrate-upgrade --configure-only —legacy-db-url=mysql://localhost/test Exporting d7_dblog_settings as upgrade_d7_dblog_settings Exporting d7_filter_format as upgrade_d7_filter_format Exporting d7_filter_settings as upgrade_d7_filter_settings Exporting d7_global_theme_settings as upgrade_d7_global_theme_settings Exporting d7_image_settings as upgrade_d7_image_settings Exporting d7_image_styles as upgrade_d7_image_styles Exporting d7_language_types as upgrade_d7_language_types Exporting d7_node_settings as upgrade_d7_node_settings ...
  • 66. Workflow: Partial upgrades • Export config, delete almost all the migrations. • Only keep what you want to save, eg: • Some content types: upgrade_d7_node_page • Tags: upgrade_d7_taxonomy_term_tags • These contain everything you need to migrate those types, even the hard parts of the migration • Modify as needed. • Eg: If you don’t migrate users, don’t keep the uid in the migrations 66
  • 67. Workflow: Partial upgrades • The D6/7 to D8 migrations include every file on the site. Could be many GBs! • It can be worth only keeping the ones referred to by content you’re keeping: • http://tiny.cc/migrateFilterFiles 67 Filtering files
  • 68. Workflow: Partial upgrades • URLs that break hurt SEO a lot • Keep the URL alias migration. Migrate redirects as well. • Since you’re throwing out some content, some links will die • Have a plan for adding redirects • Check your site afterwards for broken links • Proactive: Sitediff https://github.com/evolvingweb/sitediff • Reactive: Google Webmaster Tools 68 Broken links
  • 69. Workflow: Partial upgrades • Keep the content that’s worth keeping • Keep URLs working • Throw out the junk, build a beautiful new site • Can merge data, as long as there are no shared references 69 What we gain
  • 70. What you just saw • Intro to migrate • Workflows • Content first • Content first, in Drupal • Mirror • Content in git • Partial upgrades 70
  • 71. What you just saw Migrate can improve your content workflow! 71
  • 72. What to do now • Find me on Twitter @djvasi • Learn more about migrate • Try out these content workflows 72
  • 73. What to do now • Public: Chicago, Montreal, Toronto, NJ, NYC • Private: Health Canada, McGill University, remote • For new content editors, new developers, teams starting on D8… 73 Evolving Web training
  • 74. What to do now • Anything I got wrong? • Any new ideas I should look into? • How should migrate evolve? 74 Ask me questions!