We have several large Drupal 6 to Drupal 8 conversions queued up when D8 and the necessary contributed modules are ready.

However, we are being asked for estimates for these projects now. To get the necessary experience, we went through the upgrade/migrate process for a relatively small site and here's what we encountered...

With the release of Drupal 8 in the near future, there will be a need for many to upgrade from Drupal 6 and 7. As of this writing, the upgrade from Drupal 7 isn't ready yet, so we went through the process of updating one customer website from 6 to 8. We felt the process was quite educational and so decided to share some of our experiences with you all. (These notes may be useful for those who are not sure if they should begin preparations for a Drupal upgrade to version 8 yet.

Using the Migrate Framework

In past versions of Drupal, the upgrade process was done through a series of update hooks. For 8, this has been changed to use the migrate module API. Using the migrate module has some advantages over the update hook method:

  • New features and enhancements can be built into the new site, while the old site continues to operate.
  • Content can be migrated or updated at any time for testing theming, new features, etc.
  • When ready to deploy the new site, the upgrade process is smoother.

As with any other major version update, themes and custom modules must be updated. Any contributed modules from the previous version will need to have an 8.x release or a replacement. With more and more popular modules being added to core, this should allow for an earlier update once the final version of Drupal 8 is released.

Setting Up the Manifest

Once ready to start the migration make sure contributed modules are enabled, especially for fields. Right now, the easiest way to run a migration is using a manifest file and drush. The manifest file we used to update is:

# user - d6_user - d6_user_profile_field - d6_user_profile_field_instance - d6_user_profile_entity_display - d6_user_profile_entity_form_display - d6_profile_values:user - d6_filter_format - d6_user_role - d6_user_picture_entity_display - d6_user_picture_entity_form_display - d6_user_picture_file - d6_user_picture_field - d6_user_picture_field_instance # taxonomy - d6_taxonomy_vocabulary - d6_taxonomy_settings - d6_taxonomy_term # nodes - d6_node - d6_node_revision - d6_node_type - d6_view_modes - d6_filter_format - d6_field_instance_per_form_display - d6_field_instance_widget_settings - d6_field_formatter_settings - d6_field_instance - d6_field - d6_field_settings - d6_node_settings - d6_cck_field_values:* - d6_cck_field_revision:* # taxonomy fields - d6_term_node_revision - d6_term_node - d6_vocabulary_entity_display - d6_vocabulary_entity_form_display - d6_vocabulary_field_instance - d6_vocabulary_field # blocks - d6_block_content_type - d6_block_content_body_field - d6_block - d6_menu # custom blocks - d6_custom_block - d6_filter_format # book - d6_book - d6_book_settings - d6_file: source: conf_path: '' destination: source_base_path: '[destination base path]' destination_path_property: uri

The command to update in drush is:

drush migrate-manifest --legacy-db-url=mysql://d6user:[email protected]/d6db manifest.yml

Errors to Watch For

When running the migration, like me, you will receive a series of output messages. Some of them could be errors that stopped the migration or gave inconsistent results. Some of these errors are easy to fix, but some that I encountered were vague, making it difficult to track down the problem. Don't lose heart. If/when you face an error in during the migrate process, go to the logs: the Drupal, php, and web server error logs.

Next Steps?

If you have a Drupal 7 website, the core UI and API integration are not yet completed, so if you want to practice or prep a migration for Drupal 8 you'll have to develop a much more customized solution. Thankfully, the Drupal Core and Migration teams expect to have the Drupal 7 components into core soon after the official release of Drupal 8. Until then, you'll want to keep informed about the current state of the Drupal 8 release schedule, and try to budget the time you'll need to set up your migration protocols.