私は最近、Rails 3.2.3 バックエンドを使用して AngularJS 1.0.0rc8 アプリを作成し、開発では問題なく動作しましたが、Heroku にデプロイした後、不明なプロバイダー エラーが発生しました。明らかに、アプリはサービス オブジェクトを認識できませんでした。
angular-resource.js を別のファイルとしてインクルードし、次のようにアプリ モジュールにngResourceを挿入する必要があることはわかっています。
// main app javascript file
'use strict';
angular.module('contactapp', ['ngResource']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/contacts', {template: 'assets/app/partials/contact-list.html', controller: ContactListCtrl}).
when('/contacts/new', {template: 'assets/app/partials/new-contact.html', controller: ContactListCtrl}).
when('/contacts/:contact_id', {template: 'assets/app/partials/contact-detail.html', controller: ContactDetailCtrl}).
otherwise({redirectTo: '/contacts'});
}]);
また、ファイルが縮小されると、次のようにコントローラーオブジェクトにも注入されない限り、コントローラーは依存関係が何であるかを判断できないことも知っています。
ContactListCtrl.$inject = ['$scope', '$http', 'Contacts'];
また、Angular がブラケット表記を使用して次のような関数を渡すことを推奨する別の方法でそれを実行しようとしました。
var ContactListCtrl= ['$scope', '$http', 'Contacts', function($scope, $http, Contacts) { /* constructor body */ }];
ただし、これはどれも機能していないようです。
私のアプリケーションが提供されたリソースを確認できる唯一の方法は、次のように、Production.rb ファイルでアセットの圧縮をオフにすることでした。
# Compress JavaScripts and CSS
config.assets.compress = false
これを理解するのに数時間かかりましたが、最近、同じ問題を抱えた別の Rails + AngularJS アプリを見ました。
Jens Krause は同じ結論に達し、彼のブログで説明しています: http://www.websector.de/blog/2012/01/17/fun-with-angularjs-rails-coffeescript-sass-another-cafe-townsend-例/
比較的大きなアプリがあり、アセットを圧縮する必要がある場合、Rails で Angular を使用してこれを回避するにはどうすればよいですか?
ありがとう。