2013-05-04 26 views
11

在我的一個Rails應用程序中,ExecJS沒有顯示coffeescript編譯錯誤的行號。我的編譯錯誤信息會是這樣的:ExecJS咖啡腳本沒有顯示編譯錯誤的行號(Rails資產管道)

ExecJS::RuntimeError in Referrals#new 

Showing ~/MyApp/app/views/layouts/application.html.erb where line #6 raised: 

SyntaxError: unexpected IDENTIFIER 
    (in ~/MyApp/assets/javascripts/utils.js.coffee) 

注意,有一個爲咖啡腳本源沒有行號(6號線是爲ERB文件)。

在我的應用程序,在那裏我仍然得到行號的另一個,語法錯誤是這樣的:

ExecJS::ProgramError in Projects#show 

Showing ~/OtherApp/app/views/layouts/application.html.erb where  line #17 raised: 

Error: Parse error on line 6: Unexpected 'STRING' 
(in ~/OtherApp/app/assets/javascripts/projects.js.coffee) 

因此,似乎不同的是,ExecJS::ProgramError會給我行號,如ExecJS::RuntimeError不會。

任何人都有任何想法如何獲取行號回來?爲什麼我的應用程序在咖啡資產編譯中創建RuntimeErrors,另一個是給ProgramErrors?我檢查過Rails,它們似乎匹配。

請注意,如果我修復了編譯錯誤,應用程序運行良好(例如,咖啡文件實際上已經編譯完成) - 但是,如果讓這些行數指向編譯錯誤,那將會很好。

編輯 我意識到,無論它是一個ExecJS RuntimeerrorProgramError似乎並不重要 - 在第一個應用程序,有沒有給一個行號,並在第二,總是有。

+0

我在1.6.2上,我得到這個問題。 – Narfanator 2013-06-02 03:21:49

+0

@Narfanator你看到我的答案了嗎? – 2013-06-02 04:28:28

+0

是的;它花了我一分鐘;我把我的設置爲1.5.0,現在很好。我很驚訝功能丟失了;它是開發的核心。 – Narfanator 2013-06-02 08:38:18

回答

18

我想通了 - 這是由於coffee-script-source寶石版本。在提供行號的應用程序中,bundle show給出了1.4.0的coffee-script-source,而另一個應用程序的咖啡腳本來源版本爲1.6.1。

我沒有注意到這一點,因爲coffee-rails寶石沒有嚴格指定這種依賴關係(在我的Gemfiles中,我使用的是gem 'coffee-rails', '3.2')。 爲了解決這個問題,就明確指定咖啡腳本代碼寶石版本

gem 'coffee-rails', '3.2.2' 
gem 'coffee-script-source', '1.5.0' 

bundle update coffee-script-source

希望這可以幫助任何可能遇到這種差異的人。

+4

奇怪的是,新版本更糟糕 – Pencilcheck 2013-07-17 07:47:20

+1

我使用1.6.3,沒有行號,它基本上沒用。我已經轉向使用由節點安裝coffeescript提供的二進制文件 – Rob 2013-09-10 09:35:40