2012-07-02 62 views
5

我跟着這個tutorial,雖然將它添加到Gem文件和捆綁安裝它工作正常。我試圖把它列入到的application.js的那一刻,該文件,我得到以下錯誤,同時加載它:Rails不能包含AngularJS

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。

回答

5

我曾經面臨同樣的問題。我通過以下方式解決它。

1)在我的情況下,application.js文件中缺少//= require_tree . ..所以我添加了它。

2)重啓動Apache服務器(如果使用WEBrick,然後重新啓動)

+0

完美,謝謝! – Hengjie

+0

但是,我仍然在研究發生了什麼,然而,通過外觀的觀察,一旦將該行添加到application.js一段時間後,就可以將其刪除。這聽起來很奇怪,而且我仍在調查什麼改變了,以允許它在沒有require_tree的情況下工作。 – Hengjie

+1

require_tree。會導致你擁有一個單獨的文件(在這種情況下爲application.js),其中包含文件夾中的所有腳本。 – GBD

5

增加一個寶石,你總是需要重新啓動Web服務器。

從查看寶石的源代碼,它具有角度JavaScripts在vendor/assets/javascripts,這意味着他們將只可用//= require angular。如果它們沒有加載,可能是因爲服務器需要重新啓動,並且需要捆綁安裝。

至於require_tree .,我強烈建議不要這樣做,因爲這意味着你將失去對裝載順序的控制。

例如角本身打包在它自己版本的jQuery(jQuery的精簡版),但如果已經有jQuery的存在加載時,它會使用全球版本。

這意味着做

//= reqiure angular 
//= require jquery 

會做不同的事情,比

//= require jquery 
//= require angular 

還有許多其他的情況下,當加載順序能夠決定的事情,例如,如果你有Backbone.js的和下劃線,你將要加載之前Backbone等的下劃線等。

作爲一般的做法,我總是建議只使用require,除非你加載你的自己的代碼,其順序無關緊要,例如//= require_tree ./controllers用於您自己的控制器目錄。在那種情況下,我會說require_tree完全沒問題。

+0

這很奇怪,因爲除了一個隱藏文件之外,vendor/assets/javascripts中沒有任何內容。在將它添加到Gem文件,捆綁安裝並重新啓動工頭之後,這是否意味着正常? – Hengjie

+0

@恆傑它不會複製你的rails應用程序direclty。這個gem本身有一個'vendor/assets/javascripts'目錄。 –

2

如果有人有同樣的問題,並提供的解決方案將無法正常工作。 我已經在資產

group :assets do 
//= require angular 
end 

但仍然我得到了同樣的錯誤添加//= require angular。經過一番搜索後,我發現出於某種原因需要在資產組以外增加。現在都好。不知道這是否是一種最好的方式,但我沒有得到這個錯誤了。

4
在你的Gemfile

如果您使用的是這樣的:

group :assets do 
    gem 'angularjs-rails' 
end 

然後刪除該組:資產的東西,它應該是無遮擋簡單:

例如:

gem 'angularjs-rails' 

它肯定會工作

+1

但是爲什麼它不適用於資產組? – kiddorails

+0

在rails 4版本中,可能與這個寶石有資產衝突,需要檢查 –