我的应用程序中有很多第三方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]" %>
但是,当我在外部标签下方添加应用程序样式/ 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.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';
请告知我是否可以提供其他信息。
答案 0 :(得分:0)
尝试以下一些命令
RAILS_ENV=production rails assets:clean
RAILS_ENV=production rails assets:clobber
生产变化
config.assets.compile = true
然后再次运行
RAILS_ENV=production rails assets:precompile