Note: Since I wrote this post, I discovered Config Installer and that would be the proper way to install a new site from an existing configuration. I've tested this module and it works superbly.
Disclaimer: The steps in this tutorial are not recommend for a live site and are experimental!
Recently, I ran into an issue in my local Drupal 8 development environment where uninstalling a module failed. I was getting errors related to the module in question in both the UI and in drush. My bad for not having a recent DB backup for my local, the one I had was too old to use. (I've since fixed that with an automated backup script!) Double my bad for having installed a not-ready-for-primetime module.
That being said, my local site had a ton of configuration and custom entities and I really wanted a clean database. I first attempted to use Features to transport all my config to a new install but kept getting an "Unmet Dependancies" error and was not able to get to the bottom of it. (There are a number of Drupal 8 Features issues open related to this.) I didn't understand this error as I was simply using the same root folder with a new database.
Features aside, I knew that by nature, an existing site configuration export can't be imported into another site, this makes sense at face value. But I got to thinking, "well, I just want to take all this nice config and pop it into a brand new site" -- less anything relating to the aforementioned bad module.
Get the site UUID
I did more searching and sure enough there is roundabout way to do what I was intending. It involves a few drush commands,
drush cget and
drush cset. The first command is to get the existing UUID from your present site.
drush cget system.site uuid
This will print out the Site UUID as:
Once you get this, be sure to run
drush cex one last time which will export the current configuration.
Install and reset
Once I had the current UUID, I put my settings files back to default, created a new database and installed Drupal 8 from scratch. Once the new site installed, I updated my
settings.local.php to point to my existing configuration files:
If your remote is on Pantheon, the local config path would be like this:
Once this was set, all I had to do was reset the new site UUID to my old one that I derived from the
drush cget command by running this:
drush cset system.site uuid bfb11978-d1a3-4eda-91fb-45decf134e25
This resets the new site's UIID to the old site's UUID and that will allow you to run your config import.
Import the existing config
Now it was time to run
drush cim which imports your site configuration. Running the command the first time gave me a rather nasty looking error.
The import failed due for the following reasons: [error] Entities exist of type Shortcut link and Default. These entities need to be deleted before importing.
This might seem like a scary error but it just has to do with admin Shortcut links and there is a core issue open for this. At any rate this was a new site so I didn't really care about deleting these. I did more searching and discovered an obscure drush command to "fix" this:
drush ev '\Drupal::entityManager()->getStorage("shortcut_set")->load("default")->delete();'
Once I did that, my configuration imported like a charm, all 300 config files and several dozens of entities. I didn't see any errors after that, and everything was perfect now.
I am not sure there would be many use cases for doing what is outlined here but it did solve a specific issue, your milage may vary. I would be suspect of using this method for an existing site that has lots of things already built out. Keep in mind, I imported my existing config into a brand new site install.
- Drupal 8
- Drupal Planet
- How can I import the configuration on a different site?
- Shortcut: Errors validating the config synchronization
- Problem during import configuration