After upgrading from 3.x to 4.1, blog posts are missing

I recently upgraded my 3.x installation to 4.1 and after fixing a couple minor bugs, I’ve run across a stumper: all my blog posts are missing. They seem to be parsed as regular pages instead of blog pages. When I look at the entry in the Site Map I see the following:

Path	articles/2002-02-21-eagle-harbor-at-dawn
URL	/articles/2002-02-21-eagle-harbor-at-dawn
Source File	source/articles/2002-02-21-eagle-harbor-at-dawn.markdown
Data	{:author=>"jeff", :title=>"Eagle Harbor at Dawn", :date=>#<Date: 2002-02-21 ((2452327j,0s,0n),+0s,2299161j)>, :categories=>["Travel"]}
Options	{:layout=>"article"}

My blog definition is as follows:

activate :blog do |blog|
  blog.permalink = '{year}/{month}/{title}'
  blog.sources = 'articles/{year}-{month}-{day}-{title}.html'
  blog.layout = 'article'
  blog.default_extension = '.markdown'
end

If I change the original source file from *.markdown to *.html.markdown (which is absurd), then the article will be recognised. Surely, there has to be a way to get all the articles to be recognised without changing all extensions to be .html.markdown.

This seems to be a recurring complaint that people have after upgrading to v4:

According to Middleman’s official documentation, this was a conscious decision:

Removed “Implied Extension feature”, all templates must include a full file name plus the list of desired templating extensions.

It is quite possible to hack around Middleman internals to make it work like v3, but renaming all your files (perhaps using a script) will likely be the easiest fix.

It may be a conscious decision, but it seems to have been a decision to opt to make life more cumbersome for everyone on the off chance that it prevents a problem for someone.

I’m left with trying to get 3.x working again or switching to a different platform, because frankly, this is just ridiculous. I just want my Markdown files to be converted to HTML. They shouldn’t even have an HTML extension when they’re done, why should they have an HTML extension to start?

I don’t agree nor disagree with the decision. My guess is that it makes it more clear that the resultant file after running middleman build will be an html file. For example, having source/index.html.md will give you build/index.html. Is it redundant? Yes, since I don’t think markdown is usually compiled into anything other than html. In the end of the day, I renamed my files anyways and moved on, since that didn’t take me too long to do.

I’ve managed to get 3.x limping along again. There’s something flaky with middleman-cdn where it crashes trying to invalidate CloudFront after syncing, but I can live with that while I investigate other platforms.

I understand the concept of opinionated software, but it seems this is taking the concept a bit too far. This decision seems to make the common case more awkward in the for the sake of being explicit.

This is a problem for me too because I have a site full of content and a bunch of colleagues who are used to using .md as an extension for files that contain HTML, Markdown, and Liquid. I love everything about Middleman except for that fact that since I have a site whose files contain HTML, Markdown, Liquid, and ERB (for partials), I have to name all my content files filename.html.erb.md.liquid. There’s no way in a million years that I want to do that for 1,000 files.