2012-11-25 109 views
0

我們將兩個rails 3.2.8引擎放在一個rails應用程序中。問題是ExecJS不喜歡佈局文件中javascript_inclide_tag的命名空間。這是導致錯誤的標籤:ExecJS :: Rails 3.2.8引擎中的RuntimeError with javascript_include_tag

<%= javascript_include_tag 'authentify/application' %> 

此處authentify是rails引擎名稱。錯誤是:

ExecJS::RuntimeError in Authentify/sessions#new 
Showing C:/D/code/rails_proj/engines/authentify/app/views/layouts/sessions.html.erb where line #6 raised: 

    (in C:/D/code/rails_proj/engines/authentify/app/assets/javascripts/authentify/sessions.js.coffee) 
Extracted source (around line #6): 
3: <head> 
4: <title>Login</title> 
5: <%= stylesheet_link_tag "authentify/application" %> 
6: <%= javascript_include_tag "authentify/application" %> 
7: <%= csrf_meta_tags %> 
8: </head> 
9: 

如果我們刪除該命名空間authentify(<%= javascript_include_tag "application" %>),那麼ExecJS錯誤消失,Rails應用程序的作品。另一個帶有js標籤的rails引擎也有相同的錯誤。

我們使用的是windows環境。什麼可能導致錯誤?謝謝您的幫助。

UPDATE:

在engine.rb爲authentify,每一個JS庫被列爲:

initializer "Authentify precompile hook", :group => :all do |app| 
     app.config.assets.precompile += [ 
     'authentify/application.css.scss', 'authentify/layout.css.scss', 'authentify/login.css.scss', 
     'authentify/paginate.css.scss', 'authentify/sessions.css.scss', 'authentify/sys_logs.css.scss', 
     'authentify/toolbar.css.scss', 'authentify/user_level_group_map.css', 'authentify/user_menus.css.scss', 
     'authentify/users.css.scss', 'authentify/application.js', 'authentify/sessions.js.coffee', 
     'authentify/sys_logs.js.coffee', 'authentify/user_level_group_map.js', 'authentify/user_menus.js.coffee', 
     'authentify/users.js'] 

    end 

回答

1

看到這個問題:Using javascript_include_tag with a Subfolder full of JS

你可以爲每個引擎的初始化?在這種情況下,您可以有:

一個初始化程序(稱爲authentify) - 例如authentify.rb作爲一個初始值設定爲發動機的:

ActionView::Helpers::AssetTagHelper.register_javascript_expansion :authentify => Dir["#{Rails.root.to_s}/public/javascripts/authentify/*.js"].each {|js| js.gsub!("#{Rails.root.to_s}/public/javascripts/",'')} 

初始化器的其他(稱之爲authentify2) - 例如在其他

<%= javascript_include_tag :authentify2 %> 

,只是刪除:authentify2.rb作爲一個初始化發動機B:

ActionView::Helpers::AssetTagHelper.register_javascript_expansion :authentify2 => Dir["#{Rails.root.to_s}/public/javascripts/authentify2/*.js"].each {|js| js.gsub!("#{Rails.root.to_s}/public/javascripts/",'')} 

,然後你可以有:

在一個佈局和
<%= javascript_include_tag :authentify %> 

<%= javascript_include_tag 'authentify/application' %>以及其他引擎的其他javascript_include_tag標籤。

+0

剛剛更新與engine.rb初始化後。你的意思是兩個初始化器用於引擎驗證?你也可以解釋更多關於你的答案嗎?除了包含js庫之外,我們對js標籤瞭解不多。謝謝您的幫助。 – user938363

+0

編輯 - 這是否更清楚?不知道你如何並行運行你的2個rails引擎,他們必須從某個地方獲取配置?如果是這樣,將1個初始化rb文件放在一個配置下,另一個初始化rb文件放在另一個配置下。 – mccannf

+0

我們只在一個rails應用程序中安裝兩個rails引擎。謝謝。 – user938363

1

的問題是,execjs不能在Windows 8在這裏工作是post關於如何進入execjs運行時間並修復它在Windows 8

+0

謝謝,這個鏈接把我帶到了正確的地方。 pottsk的[解決方法](https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952)爲我做了詭計。 – camflint

相關問題