Aarmora
Aarmora

Reputation: 1153

Heroku + Rails + Angular = Unknown provider: eProvider <- e

Feeling completely baffled. I know that several questions have been asked about this and I've read and reread all of them.

Angular (with ng-route) was working until a certain commit (I'll include images of the diffs of the js files). I've already changed what I would have expected to be the guilty party, shown here:

Changed this

app.run(function($rootScope, $http){
    $rootScope.logout = function(){
        $http({
            url: 'logout',
            method: 'GET'
        }).success(function(data){
            window.location = window.location.href;
        });
    };
});

to this

app.run(['$rootScope', '$http', function($rootScope, $http){
    $rootScope.logout = function(){
        $http({
            url: 'logout',
            method: 'GET'
        }).success(function(data){
            window.location = window.location.href;
        });
    };
}]);

However, even if I completely commit out the above code the error still persists, so I really don't think that's it. I've also commented out chunk by chunk of code and nothing seems to resolve this issue.

I've attached an image showing the diff in the commit file. Before this commit, angular was working fine on Heroku/production. Am I just being stupid and not seeing it?

https://i.sstatic.net/Od9Q9.png

Thanks in advance!

Upvotes: 2

Views: 478

Answers (2)

jvrsgsty
jvrsgsty

Reputation: 588

A bit too late to this question I guess, but I stumbled accross the same problem but only while using Angular Material. All my dependencies were injected as suggested and everything worked fine before using Material.

My setup is Angular on a Rails 5 app runnning on production on Heroku. Even following the best practices on funciton annotation for Angular, injectin Angular Material will not work in production and will throw an UnknownProvider error unless you add the ngannotate-rails gem to your project.

This gem helps angular files be annotated correctly before the assets pipeline minifies the JS files and screws dependency injections up.

Upvotes: 1

Steve
Steve

Reputation: 15736

You get this kind of error when you use a JavaScript minifier that mangles a Angular dependency. Because Angular looks dependency up by argument name it can't find them.

I'm not sure what you are using to build your JavaScript into minified and merged files but you'll need to work out a way to do this in an Angular friendly way. I had a project recently that used the ngmin grunt plugin to minifier my JavaScript and started to get similar errors until I switched to ng-annotate.

Upvotes: 1

Related Questions