ruby-on-railsangularjsbowerdokkung-idle

Angular - Error: [$injector:unpr] Unknown provider: IdleProvider


Getting the error Error: [$injector:unpr] Unknown provider: IdleProvider in my application when it is deployed to our staging server using dokku but I am not getting it when running it on my local machine. I'm using ng-idle 1.2.1

I've found this question asked a number of times but the cause was always related to the changes made in version 1.0.0 where the service names were changed. The only thing I can think of is that the minification of the code is the problem but as far as I can see the code should be ok but I am not an expert. Any help would be greatly appreciated.

It's written in Coffeescript

configuration = (RestangularProvider, $logProvider, growlProvider, IdleProvider, KeepaliveProvider) ->
  .
  .
  .
  return

configuration.$inject = [
  'RestangularProvider'
  '$logProvider'
  'growlProvider'
  'IdleProvider'
  'KeepaliveProvider'
]

angular
  .module 'vssApp.config', [
    'restangular'
  ]
  .config configuration

EDIT

While trying to replicate the problem on my local machine I removed the 'ngIdle' module in the modules array below. This resulted in the same behavior so I am assuming that the problem stems from the ngIdle module not being loaded correctly here. I still feel that minification could be causing the problem but, again, I'm not sure why or how to fix it.

modules = [
  'ui.router'
  'ui.bootstrap'
  'ui.select'
  'ngAnimate'
  'ngMessages'
  'ngSanitize'
  'ngCookies'
  'smart-table'
  'angularMoment'
  'templates'
  'angular-storage'
  'angular-growl'
  'vssApp.core.auth'
  'vssApp.core.loading'
  'ngIdle'
  'cgPrompt'
  'vssApp.filters'
]

runBlock.$inject = [
  '$templateCache'
]

angular
  .module 'vssApp.core', modules
  .run runBlock

EDIT 2

Here's the full output from the error message I'm getting

Error: [$injector:modulerr] Failed to instantiate module vssApp due to:
Error: [$injector:modulerr] Failed to instantiate module vssApp.config due to:
Error: [$injector:unpr] Unknown provider: IdleProvider
http://errors.angularjs.org/1.3.16/$injector/unpr?p0=IdleProvider
    at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:18814
    at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:16489
    at getService (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:14903)
    at Object.invoke (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:15466)
    at runInvokeQueue (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13793)
    at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:14062
    at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
    at loadModules (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13587)
    at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13964
    at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
http://errors.angularjs.org/1.3.16/$injector/modulerr?p0=vssApp.config&p1=E…net%2Fassets%2Fapplication-85a5fd382c73380bf2a71b66e581c941.js%3A3%3A19482)
    at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:18814
    at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:14406
    at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
    at loadModules (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13587)
    at https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13964
    at forEach (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:19482)
    at loadModules (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:13587)
    at createInjector (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:4:16844)
    at doBootstrap (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:28466)
    at bootstrap (https://SERVER/assets/application-85a5fd382c73380bf2a71b66e581c941.js:3:28995)
http://errors.angularjs.org/1.3.16/$injector/modulerr?p0=vssApp&p1=Error%3A…net%2Fassets%2Fapplication-85a5fd382c73380bf2a71b66e581c941.js%3A3%3A28995)

Solution

  • Finally found the cause and solution to this, it seems to have been a bower issue.

    It's a Rails app, so I specified ng-idle 1.2.1 in the bower.json file but for some reason the bower file was ignored when the app was being deployed using Dokku and the last installed version 0.3.5 remained, which meant that the pre-1.0.0 ng-idle services naming convention was still being used where all service names were preceded with a $. This resulted in the Unknown provider: IdleProvider error because $IdleProvider was the actual service name.

    In the end I had to connect to the docker container and remove and reinstall all bower components. Running bower update as part of the deployment was not enough for some reason. When I have more time I will investigate what caused this behavior and I will report here.