私は、ユーザがアップロードした画像がデータベースに保存されているRails 3.1アプリケーションを持っています。私は専用のパスを使ってこれらの画像をRailsコントローラを通して提供しています。ここに私のroutes.rbをの一部です:アセットパイプラインと画像はデータベースに保存されています
get "images/book_covers/:book_id", :controller => :book_covers, :action => :show
get "assets/book_covers/:book_id", :controller => :book_covers, :action => :show
ここ
は、コントローラからのコードは次のとおりです。
class BookCoversController < ApplicationController
def show
if @image = BookCover.find_by_book_id(params[:book_id])
send_data(@image.image, :type => @image.content_type, :filename => "book_cover_#{@image.book_id}", :disposition => 'inline')
else
render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
end
end
end
このすべては、(資産のパイプラインが無効になっているので)開発モードで見事に動作しますが、Iプロダクションでアプリを試してみると、「ActionView :: Template :: Error(book_covers/61はあらかじめコンパイルされていない)」というエラーが(おそらくは、私が思いついた)
<%= image_tag book[:cover_image], :class => book[:cover_source].downcase %>
これらの画像だけでは、アプリ全体のアセットパイプラインを無効にしたくはありません。私はこれをどのように達成することができますか?
get "images/book_covers/:book_id", :controller => :book_covers, :action => :show, :as => :book_cover_image
して、テンプレート
<%= tag :img, :src => book_cover_image_path(book[:id], :class => book[:cover_source].downcase) %>
で今アセットパイプラインでも知ることができません。画像を生成について、すなわち最初のルートに名前を付け、アセットパイプラインなしで、自分にタグを付け方法
assets_host設定を使用していますか? – shingara
正確に 'book [:cover_image]'を返すのは何ですか? – shingara
@shingara私はデフォルトのassets_host設定を使用しています。実際、私はアセット設定値をカスタマイズしていません。 book [:cover_image]は相対パス(BookCoversControllerが次に処理する "book_covers/1"など)を返します。 –