【问题标题】:How to load css.erb files through asset pipeline如何通过资产管道加载 css.erb 文件
【发布时间】:2013-09-09 18:18:08
【问题描述】:

我希望我的样式表保持纯 CSS,但我想使用嵌入式 ruby​​ 来包含一些图像的动态路径:

.home {background: #FFF url(<%= image_path 'hippopotamus.jpg' %>) no-repeat; }

如果我将样式表从 .css 更改为 .css.erb,image_path 会被正确解释,但当我部署到生产环境时,资产管道不会对其进行处理。如果我硬编码路径,那么在生产或开发中都会出错,因为它们加载资产的方式不同。

我该如何解决这个问题?

【问题讨论】:

  • 如何将项目部署到生产服务器?你使用capistrano 及其load "deploy/assets" 命令吗?
  • 很遗憾没有。我对部署 Rails 应用程序非常陌生,还没有安装/学习 Capistrano。现在我只是手动拉动更改并重新启动独角兽。
  • 如果图像路径是您需要 erb 的唯一原因,我建议废弃 erb 并使用 scss。解决您的问题的 scss 示例如下所示:background: image-url('hippopotamus.jpg') no-repeat; }

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


【解决方案1】:

以下是有效的:

可以将 .erb 添加到 .css 文件并使用 ruby​​/rails 代码。所以上面我的问题中的 sn-p 很好。

你必须在 /config/environments/production.rb 中添加这样一行

config.assets.precompile = ['*.css.erb']

然后当您运行RAILS_ENV=production bundle exec rake assets:precompile 时,将生成带有指纹的 CSS 文件,并且将正确插入 image_path。

所以这解决了我的问题。

对我来说,.js 文件会自动预编译,而无需我添加任何配置选项。但是 css 或 css.erb 文件不起作用。所以这就是我实际使用的:

config.assets.precompile = ['*.js', '*.css', '*.css.erb']

【讨论】:

  • 对我来说,特定文件末尾的 .erb 不起作用。这是对我有用的示例(其中 foo 和 bar 是 .css.erb 文件:config.assets.precompile += %w( admin.js admin.css foo.css bar.css )
【解决方案2】:

您只需要预编译您的资产。很简单:

RAILS_ENV=production bundle exec rake assets:precompile

一切都将通过 Sprockets(资产管道)运行并转储到公共/资产中。只需确保将其与应用程序的其余部分一起部署到生产环境中就可以了!

【讨论】:

  • 如果我的资产管道配置正确,我在问题中显示的 sn-p 正确地位于 .css.erb 文件中?我同时也在努力配置管道,所以我试图排除变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 2018-01-20
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 2014-03-23
相关资源
最近更新 更多