如何通过资产管道加载css.erb文件

6
我希望我的样式表保持纯CSS,但我想使用嵌入式Ruby来包含一些动态图片路径:
.home {background: #FFF url(<%= image_path 'hippopotamus.jpg' %>) no-repeat; }

如果我将样式表从.css更改为.css.erb,image_path会得到正确的解释,但是当我部署到生产环境时,它不会被资源管道处理。如果我硬编码路径,它在生产或开发中都会有错误,因为它们以不同方式加载资源。
如何解决这个问题?

你是如何将项目部署到生产服务器的?你使用 capistrano 和它的 load "deploy/assets" 命令吗? - hedgesky
很遗憾,我对于部署Rails应用程序非常新手,还没有安装/学习Capistrano。目前我只能手动拉取更改并重新启动unicorn。 - emersonthis
1
如果图像路径是您需要erb的唯一原因,我建议放弃erb并选择scss。解决您问题的scss示例如下所示:background: image-url('hippopotamus.jpg') no-repeat; } - jacobsimeon
2个回答

5

以下是有效的方法:

将.erb添加到.css文件中并使用ruby/rails代码是可以的。因此,我以上述问题中的片段是没有问题的。

您需要在/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']

3
对于我来说,特定文件末尾的.erb不起作用。这是一个对我有效的示例(其中foo和bar是.css.erb文件):config.assets.precompile += %w( admin.js admin.css foo.css bar.css ) - Brian Ledsworth

2
您只需要预编译资产即可。非常简单:
RAILS_ENV=production bundle exec rake assets:precompile

所有内容都将通过Sprockets(资产管道)进行处理,并转储到public/assets中。只需确保它与应用程序的其余部分一起部署到生产环境中即可。


那么,我在问题中展示的代码片段是正确放置在.css.erb文件中的,前提是我的资源管道配置正确吗?我同时也在努力配置资源管道,所以我想排除变量的影响。 - emersonthis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接