簡體   English   中英

對於缺少的資產,Rails忽略ActionView :: Template :: Error

[英]Rails ignore ActionView::Template::Error for missing assets

ActionView::Template::Error (leagues/lal11.png isn't precompiled):

這種錯誤發生在我的應用程序中,當添加新聯盟但相應的圖像尚未預編譯時。

我明白為什么會這樣; 資產清單缺少相關路徑,因此rails無法確定其摘要。 然而,由於簡單的丟失圖像而殺死整個應用程序是愚蠢的。 有沒有辦法捕獲這個特定的例外?

在這種情況下責備資產管道似乎是錯誤的。 它是一個可選的東西,可以加快您的應用程序。 如果您對可以回退的較慢應用程序感到滿意,可以在config / environments / production.rb中輕松配置

 # Don't fallback to assets pipeline if a precompiled asset is missed
 config.assets.compile = false

我不建議這樣做!

雖然有人可能會爭辯說這不是應該引發異常錯誤的情況......事實上你是在拉一個不存在的圖像。

因此,您的代碼需要處理錯誤。 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

這將在這一情況下恢復並呈現您的默認圖像。

我無法與你達成一致,為丟失的圖像引發錯誤......我認為資產管道是鐵軌中最糟糕的代碼!

我對如何解決這個問題有一些想法:

你可以啟用實時編譯config.assets.compile = true

您可以在正在使用的幫助程序( image_tag或其他)中捕獲該錯誤並呈現默認圖像。

如果錯誤不是你的應用程序,你可以在你的控制器中使用rescue_from

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM