ExecJS::RuntimeError в движке rails 3.2.8 с javascript_include_tag

Мы объединяем два движка rails 3.2.8 в одно приложение rails. Проблема в том, что ExecJS не любит пространство имен для javascript_inclide_tag в файле макетов. Вот тег, который вызывает ошибку:

<%= javascript_include_tag 'authentify/application' %>

Здесь аутентификация — это имя движка 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: 

Если мы удалим аутентификацию пространства имен (<%= javascript_include_tag "application" %>), то ошибка ExecJS исчезнет, ​​и приложение rails заработает. Такая же ошибка для другого движка rails с тегом js.

Мы используем среду Windows. Что могло вызвать ошибку? Спасибо за помощь.

ОБНОВИТЬ:

В engine.rb для аутентификации все библиотеки 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

person user938363    schedule 25.11.2012    source источник


Ответы (2)


См. этот вопрос: Использование javascript_include_tag с подпапкой, полной JS

Можете ли вы иметь инициализатор для каждого двигателя? В этом случае у вас может быть:

Инициализатор для одного (назовите его authentify) - например. authentify.rb как один инициализатор для механизма A:

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) - например. 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 :authentify2 %>

в другом и просто удалите <%= javascript_include_tag 'authentify/application' %> в макете, а также другой тег javascript_include_tag для другого движка.

person mccannf    schedule 26.11.2012
comment
Только что обновил пост с инициализатором в engine.rb. Вы имеете в виду два инициализатора для аутентификации двигателя? Также можете ли вы объяснить больше о своем ответе? Мы мало что знаем о теге js, кроме включения библиотек js. Спасибо за помощь. - person user938363; 26.11.2012
comment
Отредактировано - это понятнее? Не знаете, как вы запускаете свои 2 рельсовых движка параллельно, они должны откуда-то собирать конфигурацию? Если это так, поместите 1 файл rb инициализатора в одну конфигурацию, а другой файл rb инициализатора — в другую конфигурацию. - person mccannf; 26.11.2012
comment
Мы просто монтируем два движка rails в одно приложение rails. Спасибо. - person user938363; 26.11.2012
comment
создал js_init.rb в конфигурации/инициализаторах аутентификации двигателя с помощью строки выше, и это сработало. Можете ли вы объяснить, почему удаление частичного пути js решает проблему? Спасибо. - person user938363; 26.11.2012

Проблема в том, что execjs не работает в Windows 8. Вот пост о том, как зайдите в среду выполнения execjs и исправьте это в Windows 8.

person user938363    schedule 27.11.2012
comment
Спасибо, эта ссылка привела меня в нужное место. обходной путь от pottsk помог мне. - person Cameron Flint; 04.09.2013