[英]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.