2016-06-22 29 views
1

が私のアプリケーションでdokkuを使用してステージングサーバーにデプロイされたときにエラーになっていますが、ローカルマシンで実行していません。私が使用していますng-idle 1.2.1

この質問は何度か尋ねましたが、原因は常にサービス名が変更されたバージョン1.0.0の変更に関連していたことが判明しました。私が考えることのできる唯一のことは、コードの細分化が問題ですが、私が見ることができる限り、コードは大丈夫ですが、私は専門家ではありません。どんな助けでも大歓迎です。

は、私のローカルマシン上で問題を再現しようとしますが、私は以下のmodules配列の'ngIdle'モジュールを取り外し

EDIT

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

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

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

のCoffeeScript

で書かれています。この結果、同じ動作になりました。この問題は、ここで正しくロードされていない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のアプリですので、私はbower.jsonファイルでng-idle 1.2.1を指定したが、

意味アプリはDokkuと 0.3.5が残った最後のインストールされたバージョンを使用して展開されていたとき亭ファイルが無視されたいくつかの理由のためにその前 1.0.0 ng-idleサービスすべてのサービス名の前に $という名前の命名規則が使用されていました。 $IdleProviderが実際のサービス名であるため、 Unknown provider: IdleProviderというエラーが発生しました。

最終的に私はドッカーのコンテナに接続し、すべてのバワーコンポーネントを取り外して再インストールする必要がありました。何らかの理由でbower updateを展開の一部として実行するだけでは十分ではありませんでした。私は時間があればこの現象の原因を調べ、ここで報告します。

+0

適切な行動は、あなたの 'bower.json'を無効にすることでしょう。それはうまくいけば、' bower update'がその依存関係の正しいバージョンを手に入れられるようにするでしょう。 。 –

0

を得ているエラーメッセージの完全な出力です。これにより、それらを切り離すことができます。これにより、サービスプロバイダへのインジェクションによる競合状態が解消されます。

アプリはvssApp.configモジュールがロードされたときIdleサービスのためにこの

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

サービスプロバイダを一度に定義されていないように見える場合。

この

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'を読み込んでいますが、同じエラーが残っています。私はこの問題を引き起こしているものを紛失している。 –

関連する問題