В настоящее время мы используем Rails 4.2.8 с Sprockets 2.12.5.
Мы пытаемся загрузить один файл манифеста javascript для настольных устройств, а другой - для мобильных устройств. Мы нашли способ добавить помощника в / helpers / application_helper, который дает нашему представлению доступ к тому, мобильное устройство или нет, как можно найти в этот вопрос о переполнении стека .
def mobile_device
agent = request.user_agent
return "tablet" if agent =~ /(tablet|ipad)|(android(?!.*mobile))/i
return "mobile" if agent =~ /Mobile/
return "desktop"
end
Мы видим, что эта функция работает, как мы ожидаем, при тестировании.
Затем в application.html.erb мы хотим сделать это:
<% if mobile_device == "mobile" %>
<%= javascript_include_tag 'application_mobile' %>
<% else %>
<%= javascript_include_tag 'application' %>
<% end %>
Похоже, он должен работать на основе этого ответа . Нам нужно require_tree. потому что есть огромное количество файлов, которые должны быть включены. Различия в файлах манифеста предназначены для файлов, которые не видны в дереве приложений и находятся в нашей папке bower_components. Мы считаем, что это работает, потому что если нам не требуются определенные файлы из папки bower_components, их функциональность нам недоступна.
Однако наше настольное приложение возвращает следующую ошибку:
- Звездочки :: CircularDependencyError в Index # index
- app / assets / javascripts / application.js уже требуется
Наша мобильная версия возвращает это:
- Звездочки :: CircularDependencyError в Index # index
- app / assets / javascripts / application_mobile.js уже требуется
Мы также попытались добавить заглушку «application» в мобильной версии и заглушку «application_mobile» в настольную версию. Это не решает проблему.
Кто-нибудь знает обходной путь для этого или есть лучшее решение?