ghe*_*ton 13 ruby-on-rails ruby-on-rails-3 asset-pipeline
在我们当前的rails应用程序中,我们遵循某些模式来包含脚本和样式表等资产.
例如,一个这样的模式是(布局内的代码):
= stylesheet_link_tag controller.controller_name
Run Code Online (Sandbox Code Playgroud)
这里的问题是并非所有控制器都有相关的样式表.检查资产是否存在的最佳方法是什么?具体来说,我知道由于缓存破坏资产名称,这里有一些技巧.
ghe*_*ton 25
最后想出了这一个.资产存在可以检查如下:
YourApp::Application.assets.find_asset("#{asset}.css").nil?
Run Code Online (Sandbox Code Playgroud)
答案是:
= stylesheet_link_tag controller.controller_name if YourApp::Application.assets.find_asset("#{controller.controller_name}.css")
Run Code Online (Sandbox Code Playgroud)
rus*_*sty 13
之前我找到了这个答案,我们很乐意find_asset
在我们的应用程序中使用(Rails 3.2.16),直到有一天它开始轰炸.
经过一番挖掘后,事实证明,即使在生产环境中,启用了资产预编译,第一次调用也find_asset
将尝试实际编译它正在寻找的资产,即使该资产已经预编译.您可以想象,这不是好消息 - 在我们的具体情况下,我们将Compass库文件拉入样式表,该样式表在dev和预编译期间工作,但不在生产中,Compass不在资产负载中路径.
长话短说,find_asset
不是一种确定资产是否可以包含的防弹方式.您可以在有人试图提交此问题的问题中阅读更多有关它的内容,随后将其关闭为非错误:https://github.com/sstephenson/sprockets/issues/411
确定资产是否存在以及在编译和预编译模式下工作的真正方法在上述问题的文件管理器需要跳过的环节中得到了证明.这是他修复的差异:https://github.com/fphilipe/premailer-rails/pull/55/files
我把它放在这里,希望发现这个的其他Google员工不会陷入我所做的同一个陷阱!
归档时间: |
|
查看次数: |
5712 次 |
最近记录: |