If you have the Media module for Drupal 8 installed (not a requirement to use media with Drupal 8, so this post may not apply to you), you need to remove it before you can upgrade to the latest core version (8.4). Unfortunately, there are a few gotchas involved with the process. This blog post is about getting rid of the old contrib Media module, so the site can be updated to Drupal 8.4 in a subsequent step. This is based on my personal experience. YMMV, as they say.
Originally I published this post on december 25th of 2017. Merry Christmas! Since this blog was added to Planet Drupal yesterday, I thought it would benefit others to re-date this to today, so it would appear in the Planet feed.
Having to maintain this site in my spare time, it has been far too long for me to upgrade it to Drupal 8.4 (it actually went live on Drupal 8.3 when 8.4 was already final, because the platform had been running for a while for another site and frankly, I just wanted it live—something about a plumber and leaky pipes). The site had been built with the contrib Media module, which turns out to be a bit of a mistake (just because of the problems I outline below, not because there was anything wrong with the module), but that's water under the bridge.
Where the Media module for Drupal 7 is the core for a (the?) leading Media solution, for Drupal 8 that responsibility moved to the new media_entity module, as well as a bunch of extension modules that add specific media types. In short, Media in Drupal 8 is much more modular. The Media module itself still existed, but it was basically a quick start suite of configuration and a few tweaks to how things worked out of the box.
The reason removing the contrib Media module is needed is that from 8.4 on, media_entity was integrated into core, except that is is now called... Media module. This means the contrib Media module would have a name collision with the new Media module in core. So, it needs to be disabled. Which is mostly OK (you can retain most of the configuration it adds), except for a new nasty gotchas.
Note that this is not about moving your site to the core media entity type. That is something that will have to happen eventually. You will have to wait for all extension modules (image, video, maybe gallery, Twitter or Instagram, etc.) to have versions that work with the core entity type, as well as for the upgrade path to be complete. This needs to happen, though, if you currently have Media module and you need to move to Drupal 8.4 (and you do need to; 8.3 stopped being supported when 8.4 came out).
Gotcha #1: Route "view.media.media_page_list" does not exist
When I first tried disabling the contrib Media module (which I will simply call Media module for the remainder of this blog post), I was greeted by this lovely error message. In full, it read:
Symfony\Component\Routing\Exception\RouteNotFoundException: Route "view.media.media_page_list" does not exist. in Drupal\Core\Routing\RouteProvider->getRouteByName() (line 190 of core/lib/Drupal/Core/Routing/RouteProvider.php).
It went along with the dreaded "An unexpected error occurred" as well as a giant stack trace, but that's just due to my development environment settings.
The View is what the Media module added in place of the View that's also added by media_entity module. I haven't quite figured out how this situation came to be, but there is still a View in the exported configuration, presumably the one added by media_entity. However, as far as I can tell, there were no actual changes to the exported configuration, so it is still a bit puzzling. Luckily, the solution turned out to be fairly straightforward; the View had its status key set to false in the exported configuration yml-file (views.view.media.yml):
langcode: nl status: false dependencies: config: - core.entity_view_mode.media.media_library - media_entity.bundle.gallery module: - entity_browser - media_entity - user
Changing it to true and re-importing configuration got rid of this problem (don't forget to remove media in core.extension.yml if you do this; chances are you didn't get a chance to actually export the configuration after disabling the Media module, so re-importing your exported configuration would happily re-enable it again—in fact, you could skip the step of disabling the module through the interface and simply remove its line from core.extension.yml).
Gotcha #2: Media module contains some tweaks
I will probably want to figure out how I want to get rid of this module at some point, as I usually prefer to stay closer to base functionality as opposed to install all sorts of little modules that may add small niceties; extra modules can break and also add a slight performance penalty. There also apparently are various modules that do something similar, which would appear to be better starting points. But that's stuff for another blog post.
Gotcha #3: When you decide you don't need Media entity slideshow
As said, Media module came with a bunch of configuration. It added all that configuration as install configuration (not optional), so it had dependencies on extension modules that were required for all that configuration. As I previously mentioned, I'm no great fan of stuff I don't really need; all it can do is break. So I figured I could remove some of the extras that came with Media. Mostly, this is no problem. You can disable the Document, Instagram and Twitter modules if you don't need them. Any configuration dependent on them, like media entity bundles and display settings, will be removed. (The same likely goes for the video embed module, but I haven't tried).
However, when you elect to remove the Media Entity Slideshow module, Drupal will make an odd report about configuration that will be removed; in addition to the usual suspects (the media bundle and all its derived configuration like fields and displays) it will want to remove the Media Embed and Media Library entity browsers as well as the Media library View. The last one is the key here. The other two depend on it, because they use it as their browser view. The View itself contains two displays that are used for the Entity Browser that is meant for creating galleries (which, oddly, does not get removed, in my experience). These displays contain a filter option to exclude galleries (in order to avoid gallery inception). Thus, the View depends on its existence and if we wish to remove the bundle, we need to remove the View.
At this point, the safest option is to abort the uninstalling of the module and go and edit the troublesome View. You need to remove the two displays:
- Gallery media select modal
- Gallery User Media select modal
Save the View and export the configuration.
Unfortunately, this did not remove the actual dependency from the View, only the displays that are the reason for having the dependency. Open the views.view.media_libary.yml file in your editor and look for all values containing gallery. This will turn up everything that had to do with the media bundle. Remove the lines you find. Save the file and re-import configuration.
Go and uninstall the module again. If the View and entity browsers are still being listed, try and clear the cache. Finally, remove the gallery_media_library entity browser (admin/config/content/entity_browser).
After the module is uninstalled, do another config export.
That's basically it. At this point, you will have to release your changes through your DTAP street (if that doesn't mean anything to you, don't worry; it simply means you have to get these changes into production) to prepare your site for the actual move to Drupal 8.4. You can not remove the Media module before getting it disabled (if you have a clever release process, you might be able to do removals at the very end, which would allow you to do things in one go).
If you use a composer-based build process, you will need to remove drupal/media from your composer.json. At the same time, you will need to add back any modules that were previously dependencies of Media that you wish to keep. The full list of dependencies for (from its .info.yml file) Media looks like this:
dependencies: - media_entity:media_entity - media_entity_image:media_entity_image - video_embed_field:video_embed_field - video_embed_field:video_embed_media - media_entity_slideshow:media_entity_slideshow - media_entity_instagram:media_entity_instagram - media_entity_twitter:media_entity_twitter - media_entity_document:media_entity_document - slick_media:slick_media - entity_browser:entity_browser - entity_browser:entity_browser_entity_form - entity_embed:entity_embed - dropzonejs:dropzonejs_eb_widget - image_widget_crop:image_widget_crop - drupal:link - drupal:editor - inline_entity_form:inline_entity_form test_dependencies: - media_entity:media_entity - media_entity_image:media_entity_image - video_embed_field:video_embed_field - video_embed_field:video_embed_media - media_entity_slideshow:media_entity_slideshow - media_entity_instagram:media_entity_instagram - media_entity_twitter:media_entity_twitter - media_entity_document:media_entity_document - slick_media:slick_media - entity_browser:entity_browser - entity_browser:entity_browser_entity_form - entity_embed:entity_embed - dropzonejs:dropzonejs_eb_widget - image_widget_crop:image_widget_crop - drupal:link - drupal:editor - inline_entity_form:inline_entity_form
Find out the versions you have installed currently and require them explicitly in your composer.json. If you added everything you need to keep, you can go ahead and remove media itself. Rebuild the site and make sure everything still works. You are now ready to actually take the step and update to Drupal 8.4.
You don't have to update to core media in 8.4
I have several production sites that updated to 8.4, but kept running media_entity from contrib.
Choosing to switch to core media is something you can do when the time is appropriate, and certainly shouldn't hold up moving to 8.4
Yes, and so this does blog. The post is not about moving from media_entity to core media, but about getting rid of the Media module, if you have it installed. Which is a big if, because you can have a perfectly working system without it based on media_entity.
If you have suggestions on how I can make that more clear, please let me know.
Edit: I added a little bit to the intro to hopefully make this clearer without overstating it.
Hi, My name is Jim and I was just looking at your website blokspeed.net and thought perhaps I would message you on your contact form to see if you need help. I really liked your website but noticed you weren't getting a lot of traffic to your site and your Alexa ranking wasn't as strong as it could be.
I can get 1,000’s of visitors looking at blokspeed.net, ready to buy your product, service or signup for your offer. Our advertising network of over 9000 websites provides a low cost and effective online marketing solution that actually works. We can help your business get more online quality traffic by advertising your business on websites that are targeted to your market. The internet is a vast entity and kick starting your online business doesn’t have to take a ridiculous amount of cash. We’ll send real people to see your web site starting almost immediately!
In fact, I can get 10,000 highly targeted visitors to your website for as little as $39 just so you can test out our service.
Right now to make things really exciting you can get 200,000 Targeted visitors to you site in 30 days for only $299. If you'd like to talk personally please give me a call at 480-331-6775 9 to 5 MST USA.
Hi, I was checking out some of your competitors
sites for a client and thought I'd drop you a quick message that might help your site.
I'm having great success with this...
SocialMonkee is a proven link building service that
already helps thousands build backlinks to their pages
(Tier 1) as well as their existing backlinks (Tier 2).
With SocialMonkee, not only can you easily build backlinks
to your pages, but also boost your existing backlinks,
and pass on the link juice to your own pages.
Submitting a URL to SocialMonkee takes less than a few
minutes, and it only takes a few seconds if you use the
Firefox or Chrome Plugin (provided to you at no cost).
The system even integrates popular content spinning and
link indexing tools so you can submit URLs even faster
and get the most out of your backlinks.
What are you waiting for? SocialMonkee is powerful, fast,
fun and beneficial! Don't miss out on this opportunity...
Your competitors won't!
To Your Success,
P.S. - If you already build backlinks but don't see the
benefits, here is your chance to boost them and make
them pass on some powerful link juice to your own pages.
Hi, I was just visiting your website and thought I'd get in touch
I think if you are serious about making money with
your Wordpress Websites by scoring
high GOOGLE Ranking, you need this plugin, period.
My buddy, Daniel has got #1 Ranking in Google for a keyword
against 219 million competition! That's how
powerful on-page SEO can be!
I just did a search on Daniel and surprisingly, this guy
is really a hidden gem. People buying his product is
"Daniel, I did not read your sales letter, I just bought.
Your past products have been so good, that I don't
even need to know what you're offering." This is no joke.
Listen, Daniel has always OVER-DELIVERED! I tested
his customer support and it is REAL fast! So rest assured,
you will get the best support from Daniel!
(A video showing you what the plugin does)
Hello, my name is Jim and I was just looking your website blokspeed.net
over and thought I would message you on your contact form and offer
some help. I really like your site but I noticed you weren’t getting a
lot of traffic and your Alexa ranking isn’t as strong as it could be.
Fortunately, I may have an answer for you. I can get you 1,000’s of
visitors looking at blokspeed.net ready to buy your product, service or
sign up for an offer and fast. Our advertising network of over 9000
websites provides a low cost and effective online marketing solutions
that actually works. I can help your business get more online quality
traffic by advertising your business on websites that are targeted to
your specific market. The Internet is vast but you don’t have to spend
huge amounts of cash to jump start your business. I can get you 10,000
highly targeted visitors directly to your website for as little as
$39.00 for a 30 day trial run.
It has taken us 12 years to perfect our system and in addition to
being exciting, it works!! We also have a special offer of 200,000
Targeted visitors spread over 60 days for a special one time charge
If you would like to talk personally and have specific questions, call
me @ 480-331-6775 from 9am to 5pm MST. Also check out the short video
here and see how everything works.