5

私はこのチュートリアルに従っていますが、Gem ファイルに追加してバンドルをインストールしても問題なく動作します。それをファイルapplication.jsに含めようとすると、ロード中に次のエラーが発生します。

throw Error("Sprockets::FileNotFound: couldn't find file 'angular'\n  (in /my/path/to/rails/app/assets/javascripts/application.js:13)")

application.js ファイルは次のようになります (13 行目から):

//= require angular
//= require jquery
//= require jquery_ujs
//= require jquery.ui.autocomplete
//= require bootstrap
//= require pusher.min.js
//= require pusher_setup
//= require_directory .

したがって、私の質問は、AngularJS を Rails プロジェクトにうまく組み込むにはどうすればよいかということです。

現在、Rails 3.2.2 と Ruby 1.9.3 を使用しています。

4

4 に答える 4

6

私は同じ問題に直面していました。以下の方法で解決しました。

1)私の場合、ファイル//= require_tree .に欠落しapplication.jsていたので、追加しました。

2) Apache サーバーを再起動します (webrick の場合は再起動します)。

于 2012-07-02T11:50:45.867 に答える
5

gem を追加した後は、常に Web サーバーを再起動する必要があります。

gem のソース コードを見ると、Angular JavaScript がvendor/assets/javascriptsに含まれています。つまり、//= require angular. それらがロードされない場合は、おそらくサーバーを再起動する必要があり、バンドル インストールが必要なためです。

についてはrequire_tree .、これを行わないことを強くお勧めします。これは、ロードされる順序を制御できなくなることを意味するためです。

たとえば、angular 自体は独自のバージョンの jQuery (jQuery-lite) にパッケージ化されていますが、ロード時に jQuery が既に存在する場合は、グローバルバージョンが使用されます。

つまり、

//= reqiure angular 
//= require jquery

とは違うことをします

//= require jquery
//= require angular

読み込み順序が重要になるケースは他にもたくさんあります。たとえば、Backbone.js と Underscore がある場合、Backbone の前に Underscore を読み込みたい場合などです。

一般的な慣例として、コントローラーの独自のディレクトリrequireなど、順序が問題にならない独自のコードをロードする場合を除き、常に を使用することをお勧めします。//= require_tree ./controllersその場合、私require_treeは完全に大丈夫だと思います。

于 2012-07-03T19:51:28.587 に答える
4

次のように使用している場合は、gemfileで:

group :assets  do
   gem 'angularjs-rails'
end

次に、その group :assets を削除します。ブロックなしでシンプルにする必要があります。

元:

gem 'angularjs-rails'

それは間違いなくうまくいくでしょう

于 2014-12-04T09:46:45.300 に答える
2

誰かが同じ問題を抱えていて、提供された解決策がうまくいかない場合。//= require angularアセットに追加しました

group :assets do
//= require angular
end

しかし、それでも同じエラーが発生しました。少し検索した後、何らかの理由でassets グループの外に追加する必要があることがわかりました。今は大丈夫です。これが最善の方法かどうかはわかりませんが、このエラーはもう発生していません。

于 2014-05-21T01:15:14.573 に答える