В моем приложении много сторонних js / css файлов.Мы ускорили развертывание, скомпилировав эти файлы в external-[hash].js
и external-[hash].css
(поэтому Rails не нужно компилировать эти файлы при каждом отдельном развертывании)
И загрузили их вот так в application.html.erb
<%= stylesheet_link_tag "external", :media => "all" %>
<%= javascript_include_tag "external" %>
Эти два файла находятся под /public/assets/
.Это работало нормально, когда мы работали на Rails 4. В настоящее время мы пытаемся перейти на Rails 5, и эти два файла загружаются неправильно.
Я изменил теги ниже, и в консоли Chrome эти файлы, похоже, были загружены правильно.
<%= stylesheet_link_tag "/assets/external-[hash]", :media => "all" %>
<%= javascript_include_tag "/assets/external-[hash]" %>
Однако, когда я добавляю в приложение теги style / js под внешними тегами
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
Iпродолжаю получать ошибку
Error: "img" failed to @extend ".img-responsive".
The selector ".img-responsive" was not found.
Use "@extend .img-responsive !optional" if the extend should be able to fail.
Глядя на external-[hash].css
, я вижу, что определен селектор .img-responsive
.Итак, похоже, что Rails 5 неправильно загружает эти два файла?
В настоящее время я использую Rails 5.1.7, Ruby 2.4.2
Я также пытался добавить config.public_file_server.enabled = true
в файлы окружения.
Вот как я настроилвнешние файлы.
У меня есть external.js
и external.scss
, эти файлы живут под app/assets
.
Внутри application.js / css я добавил stub external
к обоим, поэтому, когда приложение rails развертывается, оно игнорирует внешние файлы.Я запускаю RAILS_ENV=external_assets rails assets:precompile
и фиксирую эти файлы в git, ожидая, что они будут загружены первыми.
Пример external.js
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require jquery.readyselector
//= require bootstrap
//= require bootstrap-datepicker
//= require moment
//= require d3
//= require c3
//= require jsgrid.min
//= require bootstrap-datetimepicker
external.css
/*
*= require_self
*= require bootstrap-datepicker
*= require bootstrap-datetimepicker
*= require rails_bootstrap_forms
*= require c3
*= require jsgrid.min
*= require jsgrid-theme.min
*/
@import "font-awesome-sprockets";
@import "font-awesome";
@import 'bootstrap-sprockets';
@import 'bootstrap';
@import 'bootstrap-datetimepicker';
Пожалуйста, дайте мне знать, если я смогу предоставить любую другую информацию.