2016-06-22 6 views
1

Получение ошибки Error: [$injector:unpr] Unknown provider: IdleProvider в моем приложении, когда оно развертывается на нашем промежуточном сервере с помощью dokku, но я не получаю его при запуске на моем локальном компьютере. Я использую ng-idle 1.2.1

Этот вопрос задан несколько раз, но причина всегда была связана с изменениями, внесенными в версию 1.0.0, где имена служб были изменены. Единственное, о чем я могу думать, это то, что минимизация кода является проблемой, но насколько я вижу, код должен быть в порядке, но я не эксперт. Любая помощь будет принята с благодарностью.

Это написано в CoffeeScript

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

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

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

EDIT

При попытке воспроизвести проблему на моей локальной машине я удалил 'ngIdle' модуль в modules массиве ниже. Это привело к такому же поведению, поэтому я предполагаю, что проблема связана с неправильным загрузкой модуля ngIdle. Я все еще чувствую, что минимизация может вызвать проблему, но, опять же, я не уверен, почему и как ее исправить.

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

Вот полный выход из сообщения об ошибке я получаю

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) 
+1

запятая (,) отсутствует после каждой записи конфигурации. $ Inject array – ranakrunal9

+0

Извините, что я должен был упомянуть, что это написано на CoffeeScript, поэтому запятые не нужны –

+0

IdleProvider скорее всего будет принадлежать модулю ngIdle. И он не загружен. – estus

ответ

0

Наконец-то нашли причину и решение этого вопроса, похоже, это была проблема.

Это приложение Rails, поэтому я указал ng-idle 1.2.1 в файле bower.json но по каким-то причинам файл становой был проигнорирован, когда приложение было развертывается с помощью Докку и последнюю установленную версию 0.3.5 осталась, а это означает, что до- 1.0.0 ng-idle услуги соглашение об именах все еще используется, когда всем именам служб предшествует $. Это привело к ошибке Unknown provider: IdleProvider, так как $IdleProvider было фактическим именем службы.

В конце концов мне пришлось подключиться к контейнеру докера и удалить и переустановить все компоненты башмака. По какой-то причине запуск bower update в качестве части развертывания был недостаточным. Когда у меня будет больше времени, я буду исследовать причину такого поведения, и я отчитаюсь здесь.

+0

Правильный курс действий, вероятно, будет заключаться в том, чтобы не разглашать ваш 'bower.json', который, как мы надеемся, заставит' bower update' подобрать правильную версию этой зависимости , –

0

Эмпирическое правило заключается в загрузке модулей зависимостей в каждом месте, где они используются , Это позволяет отделить их. И это устраняет состояние гонки с инъекцией поставщика услуг.

Если приложение выглядит следующим образом поставщик услуг

angular.module('vssApp', ['vssApp.config', 'ngIdle', ...]).. 
angular.module('vssApp.config', ['restangular'])... 

Idle для обслуживания не определен в то время, когда vssApp.config модуль загружен.

Хотя этого

angular.module('vssApp', ['ngIdle', 'vssApp.config', ...]) 
angular.module('vssApp.config', ['restangular'])... 

избегает гонки состояние, но по-прежнему указывает код запах.

Это должно быть

angular.module('vssApp.config', ['restangular', 'ngIdle'])... 

Этот вопрос относится только и фазы конфигурации поставщиков услуг. Служебные экземпляры могут быть введены для любого заказа модуля.

+0

Я полностью вижу преимущества загрузки зависимостей индивидуально, как вы описали выше, и я изменю это в будущем, но это все еще не объясняет проблему, с которой я сталкиваюсь. Если это было так, проблема должна существовать, когда я запускаю код локально, но я вижу его только на нашем промежуточном сервере после его развертывания. –

+0

@ RobbieNolan Это может зависеть от некоторых обстоятельств, которые остаются за сценой, например, как приложение построено. Пока неясно, как «vssApp.config» вписывается в код выше. Вы не указали полное сообщение об ошибке, и не очевидно, что ошибка появляется в 'vssApp.config'. В любом случае, если 'ngIdle' загружается в каждый модуль, который использует свои службы, это должно решить проблему. – estus

+0

Я следил за вашим советом, и теперь я загружаю 'ngIdle' в каждый модуль, который его использует, но по-прежнему сохраняется та же ошибка. Я не понимаю, что вызывает эту проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^