我正在使用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
在我的application.js
//= require moment
//= require bootstrap-datetimepicker
//= require pickers
//= require seiyria-bootstrap-slider
这在开发方面效果很好,但是当我在服务器上运行RAILS_ENV=production rake assets:precompile
(capistrano部署或手动)时,其他人似乎没有被拉进来.Chrome首先专门抱怨这两个。< / p>
我知道我可以放行Rails.application.config.assets.precompile += %w( *.js )
然后执行=javascript_include_tag :XXXX
,但是这会破坏链轮/清单的目的吗?
我对sprockets / manifest的理解是当我在application.js
中需要它时,它将包含在部署中,以便客户端更少地点击服务器。
我有什么遗失的吗?
修改
将问题追溯到uglifier
宝石。当我删除/注释掉config.assets.js_compressor = :uglifier
并重新编译JS开始再次工作时。
有什么想法吗?
答案 0 :(得分:4)
这是因为与生产相比,开发过程中的工作方式不同。 几点需要注意: -
config.precompile
指令中列出的其他文件 OR 中包含CSS或JS文件,否则您的应用无法通过资源管道使用这些文件。只有application.css
和默认情况下,application.js
可用于所有CSS和JS文件。public/assets
文件夹中。如果如果要添加一些Web字体,可以创建app / assets / fonts /文件夹并将字体放在那里,然后在编译资源时将这些字体复制到public/assets/fonts
文件夹。请注意,引用这些字体的app/assets/stylesheets/fonts.css.scss
文件将不被复制,除非您将其添加到config.assets.precompile
指令或从application.css
} config.assets.compile
...如果设置为&#34; true&#34; (默认情况下在开发中)然后 Rails 将首先查看public/assets
目录并尝试查找Javascript或CSS文件,如果找不到它,将会寻找你的app/assets
文件夹寻找文件。如果它在app/assets
中找到它,它将继续进行动态编译,然后提供此资产。问题在于你没有注意到它在开发过程中发生,然后你提交了所有内容并推送到生产和BOOM,因为生产具有{{ 1}}设置为&#34; false&#34; 。这可以防止应用程序退回&#34;并尝试直接加载文件,而不是使用资产管道。
config.assets.compile
为什么不把这个设置为&#34; true&#34;在每个环境?好吧,因为它是sloooooow。而且你不希望生产缓慢
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false