Rails会忽略ActionView :: Template :: Error丢失资产

noo*_*odl 3 ruby-on-rails asset-pipeline

ActionView::Template::Error (leagues/lal11.png isn't precompiled):
Run Code Online (Sandbox Code Playgroud)

添加新联赛后,我的应用中会发生此类错误,但尚未预编译对应的图像。

我了解为什么会这样;资产清单缺少相关路径,因此Rails无法为其确定摘要。但是,由于缺少简单的映像而杀死整个应用程序是愚蠢的。有没有办法捕获这个特定的异常?

eng*_*ave 5

在这种情况下责备资产管道似乎是错误的。它是可选的,可以加快您的应用程序的速度。如果您对较慢的应用程序会后退感到满意,则可以在config / environments / production.rb中轻松配置它

 # Don't fallback to assets pipeline if a precompiled asset is missed
 config.assets.compile = false
Run Code Online (Sandbox Code Playgroud)

我不建议您这样做!

尽管可能会争辩说这不是应该引发异常错误的情况……事实是您正在提取不存在的图像。

因此,您的代码需要处理一个错误。IMO在面向对象代码中的更好表现是大量失败而不是巧妙地失败。失败会产生一个不错的失败消息,可用于修复代码。

我建议通过可以处理该错误的助手进行路由。像这样的东西是这个答案的变体

 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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这将恢复并渲染您的默认图像。