预编译资产无法正确加载

时间:2019-05-16 04:05:52

标签: ruby-on-rails ruby-on-rails-5 asset-pipeline

我的应用程序中有很多第三方js / css文件。我们通过将这些文件编译为external-[hash].jsexternal-[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

但是,当我在外部标签下方添加应用程序样式/ js标签

<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

我不断收到错误消息

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.jsexternal.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 :(得分:0)

尝试以下一些命令

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

生产变化

config.assets.compile = true

然后再次运行

RAILS_ENV=production rails assets:precompile