ActionView::Template::Error (leagues/lal11.png isn't precompiled):
当添加新联赛但相应的图片未预编译时,我的应用程序会出现此类错误。
我理解为什么会发生这种情况; 资产清单缺少相关路径,因此Rails无法确定其摘要。然而,因为简单的缺失图像而杀死整个应用程序是愚蠢的。有没有办法捕捉这个特定的异常?
ActionView::Template::Error (leagues/lal11.png isn't precompiled):
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
虽然有人可能会认为这不是应该引发异常错误的情况...但事实上,你正在获取一个不存在的图像。
所以你的代码需要处理这个错误。在面向对象的代码中,我认为失败大而化之比聪明更好。这种失败会创建一个很好的失败消息,可以用来修复代码。
我建议通过一个能够处理错误的帮助程序进行路由。类似于这个答案的变体。
def safe_image_tag(source, options = {})
begin
count = 0
source ||= "blank-profile-md.png"
image_tag(source, options)
rescue Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError
count += 1
source = "blank-profile-md.png"
retry if count < 2
end
end
我非常同意你的看法,对于缺少图像而引发错误……我认为资产管道是Rails中最糟糕的代码!
我有一些想法可以解决这个问题:
您可以启用实时编译 config.assets.compile = true
您可以在使用 helper(image_tag
或其他)时捕获该错误并呈现默认图像。
如果错误不是全局的,您可以在控制器中使用 rescue_from
。