【问题标题】:Rails App: pipeline asset not working as expectedRails App:管道资产未按预期工作
【发布时间】:2015-05-12 21:02:46
【问题描述】:

我是 ruby​​ 和 rails 新手,所以请耐心等待。

我在 Rails 中有一个 SASS 文件 (stats.css.scss),它在我的开发环境中正确加载,但在我的生产环境中没有加载。我知道是资产管道造成了这种情况,但已经进行了几次尝试,但无法找出问题所在。这是我得到的:

在我的站点/应用程序/资产/样式表文件夹中,我有 stats.css.scss 文件

index.html.erb 文件正在像这样加载 SASS 文件:

<%= stylesheet_link_tag "stats", media: "all" %>

当我在开发环境中检查加载页面(谷歌浏览器中的Ctrl+U)的源代码时,我看到了这个

<link href="/assets/stats.css?body=1" media="all" rel="stylesheet" />

这是我所期望的,因为它看起来确实像资产管道中包含的 JS。但在生产环境中,源代码显示了这一点

<link href="/stylesheets/stats.css" media="all" rel="stylesheet" />

谁能帮我弄清楚我错过了什么?谢谢!

【问题讨论】:

  • 您是否运行rake assets:precompile 来预编译资产以进行生产部署?此外,如果您可以使用清单文件来要求资产,通常比一个一个地执行要好。你可能想看看guides.rubyonrails.org/asset_pipeline.html
  • 我是在本地机器上完成的,但我们的部署有点复杂:我们将代码推送到 github,其余的由自动化服务器处理。我应该在推动之前这样做吗?还有其他建议吗?
  • 资产文件进入github了吗?
  • 是的。我将我的 site/app/assets/stylesheet/stats.css.scss 文件推送到 github。
  • 您是否在本地 m/c 和 github 上的 /public/assets 中看到缩小的资产文件?

标签: css ruby-on-rails ruby-on-rails-4 sass asset-pipeline


【解决方案1】:

建议:不要在生产环境中编译资产。没必要也容易出问题。


既然你没有提到它,我猜你没有在预编译配置中添加stats.css。将以下内容添加到config/application.rb

config.assets.precompile += %w( stats.css )

Rails Guide 现在建议在config/initializers/assets.rb 中这样做

Rails.application.config.assets.precompile += %w( stats.css )

为什么这是必要的?来自指南:

用于编译文件的默认匹配器包括 app/assets 文件夹中的 application.js、application.css 和所有非 JS/CSS 文件(这将自动包括所有图像资产):

[ Proc.new { |filename, path| path =~ /app\/assets/ && !%w(.js .css).include?(File.extname(filename)) }, /application.(css|js)$/ ]

换句话说,如果您希望在任何时候预编译stats.css.scss,您需要明确告诉 Sprockets 这样做。

【讨论】:

  • 我认为关键是要预编译资产,以便更快地提供服务。这听起来像是解决问题的可能方法,但 IMO 最好遵循资产管道指南并使用清单文件等。如果您正确执行此操作,则无需担心 config.assets.precompile 或为任何单个文件做任何事情.
  • 除了application.jsapplication.css之外,预编译css和js文件没有问题。这是大型应用程序中的良好做法。我不建议反对预编译资产;我建议他不要在生产服务器上这样做。作为部署和rsync 资产的一部分进行预编译。您不需要生产服务器上的 ruby​​、node.js 等东西来进行资产编译,您不需要将编译后的资产提交到 VCS,并且您保证构建不会包含较新的版本资产数量超出非严格依赖规范的预期。
  • 解决了!除了它位于不同的文件中:在我的情况下,它位于 site/config/enviroments/production.rb 那里我找到了一个包含其他几个预编译的 .css 文件的列表。感谢您的帮助!
  • 只要它们都附加到precompile 配置选项,将它放在config/application.rb 中就可以了。例如,如果你也有一个staging 环境,那么将这种东西放在config/application.rb 中可以说更好,因为它可以避免config/environment 中的production.rbstaging.rb 之间的重复。
猜你喜欢
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多