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

この種のエラーは、新しいリーグが追加されたが、対応する画像がプリコンパイルされていない場合に私のアプリで発生します。

私はこれが起こっている理由を理解しています。アセットマニフェストに関連するパスがないため、Railsはそのダイジェストを判別できません。ただし、単純な画像の欠落が原因でアプリ全体を強制終了するのは愚かです。この特定の例外をキャッチする方法はありますか?

4

2 に答える 2

5

この場合、アセットパイプラインを非難するのは間違っているようです。それはあなたのアプリケーションをスピードアップするためにそこにあるオプションのものです。フォールバックする低速のアプリケーションに満足している場合、これはconfig / environment/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

この場合、これによりデフォルトの画像が復元されてレンダリングされます。

于 2013-07-30T17:41:57.160 に答える
0

私はあなたにこれ以上同意できず、画像が欠落しているためにエラーが発生します...アセットパイプラインはRailsの中で最もくだらないコードだと思います!

私はあなたがどのように問題に取り組むことができるかについていくつかの考えを持っています:

ライブコンパイルを有効にすることができますconfig.assets.compile = true

使用しているヘルパー(またはその他)でそのエラーをキャッチしimage_tag、デフォルトの画像をレンダリングすることができます。

rescue_fromエラーがアプリ全体にない場合は、コントローラーで使用できます。

于 2012-10-13T14:34:32.957 に答える