nit*_*jri 1 ruby gem assets ruby-on-rails
我正在使用Datetimepicker和Slider。我将它们包含在我的 Gemfile 中
gem 'datetimepicker-rails', github: 'zpaulovics/datetimepicker-rails', branch: 'master', submodules: true
source 'https://rails-assets.org' do
# gem 'rails-assets-select2-bootstrap-css'
gem 'rails-assets-seiyria-bootstrap-slider'
end
Run Code Online (Sandbox Code Playgroud)
在我的 application.js
//= require moment
//= require bootstrap-datetimepicker
//= require pickers
//= require seiyria-bootstrap-slider
Run Code Online (Sandbox Code Playgroud)
这在开发中效果很好,但是当我RAILS_ENV=production rake assets:precompile在服务器上运行(capistrano 部署或手动)时,这些和其他人似乎没有被拉进来。 Chrome 首先专门抱怨这两个。
我知道我可以放线Rails.application.config.assets.precompile += %w( *.js )然后做一个=javascript_include_tag :XXXX,但这违背了链轮/清单的目的,对吗?
我对链轮/清单的理解是,当我需要它时,application.js它将包含在部署中,因此客户端对服务器的访问更少。
有什么我想念的吗?
编辑
将问题追溯到uglifier宝石。当我删除/注释掉config.assets.js_compressor = :uglifier并重新编译时,JS 再次开始工作。
有什么想法吗?
这是因为与生产相比,开发中的工作方式不同。有几点需要注意:-
config.precompiledirective.Onlyapplication.css和application.js可被所有的CSS和JS文件的默认。public/assets文件夹中。所以如果你想添加一些网络字体,你可以制作一个 app/assets /fonts/ 文件夹并将您的字体放在那里,这些将public/assets/fonts在您编译资产时复制到文件夹中。请注意,您app/assets/stylesheets/fonts.css.scss引用这些字体的文件不会被复制,除非您将其添加到config.assets.precompile指令中或从您的指令中要求它application.cssconfig.assets.compile...如果它被设置为“true”(在开发中是默认的),那么Rails将首先在public/assets目录中查找一个 Javascript 或 CSS 文件,如果找不到它,将搜索您app/assets正在查找文件的文件夹。如果它在其中找到它,app/assets它将继续进行动态编译,然后提供此资产。这样做的问题是您没有注意到它在开发中发生,然后您提交所有内容并推送到生产和 BOOM,一切都因 500 个错误而被破坏,因为生产已config.assets.compile设置为 "false" 。这可以防止应用程序“回退” "并尝试直接加载文件而不是使用资产管道。
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
Run Code Online (Sandbox Code Playgroud)
为什么不在每个环境中都将此设置为“true”?好吧,因为它太慢了。而且您不希望生产缓慢
RAILS_ENV=production rake assets:clean assets:precompile| 归档时间: |
|
| 查看次数: |
9289 次 |
| 最近记录: |