I dunno if the magic is the real problem. I think the real problem with full-stack frameworks is that they require you to drink their entire pitcher of Kool-Aid in order to get up and running. There's no easy "Hello World" to give new users confidence.
Take Django for instance (because I have more experience with it than I have with Rails). Just to get through the introductory tutorial (https://docs.djangoproject.com/en/dev/intro/tutorial01/) you have to wrap your brain around projects, apps, views, models, and Django's command-line tools. Contrast that to getting started in PHP without a framework; you can introduce someone who only knows HTML to PHP extremely gently, by taking an existing HTML document (which they understand) and sprinkling in some PHP to do simple stuff. They won't be a programming god with that knowledge, of course, but that's not important; what's important is that they took the first step and succeeded, which gives them the confidence to take the second. With a full-stack framework, getting that first step right involves a lot of mental work, which increases the chances that people will screw it up or abandon it in frustration.
Frameworks frequently compound this problem by inventing their own terminology for features, or taking words people already use and redefining them, so you can't easily map things you already know from other systems to things inside the framework. Just in the Django intro, for instance, we have to learn the difference between projects and apps, both of which are commonly used terms that Django has overloaded with Django-specific meanings.
All of this means that taking the first step in going from "has never used Django" to "Django newbie" involves a lot of learning, and that guarantees that some people are going to just walk away and others are going to try to follow along but get lost in the complexity.
Take Django for instance (because I have more experience with it than I have with Rails). Just to get through the introductory tutorial (https://docs.djangoproject.com/en/dev/intro/tutorial01/) you have to wrap your brain around projects, apps, views, models, and Django's command-line tools. Contrast that to getting started in PHP without a framework; you can introduce someone who only knows HTML to PHP extremely gently, by taking an existing HTML document (which they understand) and sprinkling in some PHP to do simple stuff. They won't be a programming god with that knowledge, of course, but that's not important; what's important is that they took the first step and succeeded, which gives them the confidence to take the second. With a full-stack framework, getting that first step right involves a lot of mental work, which increases the chances that people will screw it up or abandon it in frustration.
Frameworks frequently compound this problem by inventing their own terminology for features, or taking words people already use and redefining them, so you can't easily map things you already know from other systems to things inside the framework. Just in the Django intro, for instance, we have to learn the difference between projects and apps, both of which are commonly used terms that Django has overloaded with Django-specific meanings.
All of this means that taking the first step in going from "has never used Django" to "Django newbie" involves a lot of learning, and that guarantees that some people are going to just walk away and others are going to try to follow along but get lost in the complexity.