Rails资产未在生产中进行预编译

问题描述 投票:1回答:1

我正在使用DatetimepickerSlider 。 我将它们包含在我的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部署或手动进行RAILS_ENV=production rake assets:precompile ),这些东西似乎并没有被引入。Chrome首先抱怨这两个问题。

我知道我可以把Rails.application.config.assets.precompile += %w( *.js ) ,然后执行=javascript_include_tag :XXXX ,但这Rails.application.config.assets.precompile += %w( *.js )了链轮/清单的目的吗?

我对链轮/清单的理解是,当我在application.js需要它时,它将包含在部署中,因此客户端对服务器的命中率降低了。

有什么我想念的吗?

编辑跟踪问题到uglifier gem。 当我删除/注释掉config.assets.js_compressor = :uglifier并重新编译时,JS再次开始工作。

有什么想法吗?

ruby-on-rails ruby gem assets
1个回答
4
投票

这是因为与生产相比,事物在开发中的工作方式有所不同。 注意事项:

  1. 除非它们包含在其他文件中config.precompile指令中列出,否则没有任何CSS或JS文件可通过资产管道用于您的应用application.js ,默认情况下,所有CSS和JS文件仅application.cssapplication.js都可用。
  2. 在编译public/assets时, Rails会将每个不是Javascript文件或CSS文件的文件都复制到public/assets文件夹中。因此,如果要添加一些Web字体,可以制作一个app / assets / fonts /文件夹,然后在其中放置字体,然后在编译资产时将它们复制到public/assets/fonts文件夹。 请注意,引用这些字体的app/assets/stylesheets/fonts.css.scss文件不会被复制,除非您将其添加到config.assets.precompile指令中或从application.css要求它
  3. for config.assets.compile ...如果将其设置为“ true”(在开发中是默认设置),那么Rails将尝试通过首先查看public/assets目录来查找Javascript或CSS文件,如果可以找不到它,将在您的app/assets文件夹中搜寻该文件。 如果它在app/assets找到它,它将继续进行并进行即时编译,然后将其投入使用。

问题是您不会注意到它在开发中发生,然后您提交所有内容并将其推送到生产和BOOM,因为生产config.assets.compile设置为“ false”,所以一切都被500错误破坏了。应用程序从“后退”并尝试直接加载文件,而不是使用资产管道。

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false

为什么不在每个环境中都将其设置为“ true”? 好吧,因为它是sloooooow。 而且你不想生产缓慢

  1. 运行RAILS_ENV=production rake assets:clean assets:precompile
  2. 检查public / assets目录并验证资产是否已编译。.如果资产不为空...表示资产管道正在运行,但路径不正确。请使用asset_helpers设置css文件中资产的路径。
© www.soinside.com 2019 - 2024. All rights reserved.