Прекомпиляция ресурсов не загружается должным образом - PullRequest
0 голосов
/ 16 мая 2019

В моем приложении много сторонних 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]" %>

chrome console source screenshot

Однако, когда я добавляю в приложение теги 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';

Пожалуйста, дайте мне знать, если я смогу предоставить любую другую информацию.

1 Ответ

0 голосов
/ 16 мая 2019

Попробуйте выполнить несколько приведенных ниже команд

RAILS_ENV=production rails assets:clean
RAILS_ENV=production rails assets:clobber

И внесите изменения в производство

config.assets.compile = true

Затем снова выполните

RAILS_ENV=production rails assets:precompile
...