2009-12-07 6 views
36

これは簡単ですが、私はレールが初めてです。私は写真をアップロードしてRuby on Railsに表示する最善の方法を探しています。私はブログを持っていて、投稿を作成するときに写真を添付するオプションが必要です。写真をアップロードするRuby on Rails

答えて

25

ペーパークリップは非常に素晴らしいです。それについての優れたRailsCastがあります - あなたはあなたのような何かを行うことができ、依存関係を追加すると、あなたのDBでBLOBとして画像を保存したくない、派手な機能を必要としないと仮定すると、http://railscasts.com/episodes/134-paperclip

3

多くの人がPaperClipをお勧めします。おそらく最初にそれを試してみたいです。

7

モデル:

class Image < ActiveRecord::Base 
    def img=(input_data) 
    self.filename = input_data.original_filename 
    self.filetype = input_data.content_type.chomp 
    self.img = input_data.read 
    end 
end 

コントローラー:

class ImagesController < ApplicationController 
    def display_img 
    @img = Image.find(params[:id]) 
    send_data(@img.img, :type => @img.filetype, :filename => @img.filename, 
       :disposition => 'inline') 
    end 
end 

Here's a linkより完全なチュートリアルへ。

+4

大きなブロブをデータベースに格納しないようにしてください。それは良い考えではありません。 – bensie

2

attachment_fu(http://github.com/technoweenie/attachment_fu)は個人的にはpaperclipをお勧めしますが、別のオプションです。それは大きなプラスであるRmagickを必要とせず、マイナーコンフィグレーションでS3へのアップロードのようないくつかのクールな機能をサポートします。

3

CarrierWaveは、おそらくRailsでの画像アップロードに最適なソリューションです。 次の記事では、CarrierWaveを使用した画像アップロードのソリューションについて説明していますが、画像変換はクラウド内でシームレスに行われます。アップロードされた画像はクラウドに保存され、CDN経由で配信されます。 RMagick、MiniMagick、ImageMagickをインストールする必要はありません。 http://cloudinary.com/blog/ruby_on_rails_image_uploads_with_carrierwave_and_cloudinary

4

多くの人がCarrierwaveを使用することをお勧めしますが、私は例外ではありませんが、1つのことを指摘したいと思います。 RoRで書かれた多くのサイトでは(明らかにRoRの問題だけではない)、画像を送信しているリクエストが2-3秒間保留されていることに気付くことが多く、アプリケーションインスタンスを結びつけることが多い(おそらく恐ろしいあなたがスレッドを使用している場合やパフォーマンスについてはあまり気にしませんが、ユニコーンを使用している場合は間違いありません)。

1)アプリのいくつかの背景ワーカー(私は通常Sidekiqで行く)

2)あなたのGemfileにcarrierwave_backgrounderを追加し、あなたで動作するように設定選ぶ:だから私はcarrierwaveを使用することを回避する方法を説明しますバックグラウンドワーカーとcarrierwave(そのreadmeのすべて)

私は通常私のディレクトリを管理しているので、私は、ファイルシステムやS3またはあなたが

を使用しているものは何でもして画像を処理し、格納 carrierwave_backgrounderstore_in_backgroundオプションで行きます

3)今、あなたのアプリケーションのインスタンスを解放する、ほとんどの場合、1秒以上の時間がかかり、ユーザーに何らかの応答を返す必要があります。

4)最も簡単ですユーザーに何らかの応答を提供する方法は、古い写真をGIFに変更して、その写真を処理したかどうかを確認する関数SetInterval()を変更する機能を提供するjavascriptを返すことです。処理が完了したらモデルのブール型列をtrueに設定します)、AJAXリクエストを2秒ごとに送信するか、好みの処理を行い、処理されたときに画像を変更します。

アンタイドアプリケーションインスタンスと優れたユーザーエクスペリエンスが同時に実現しました。私は、このガイドでは、私が

はそれが誰かを助けいただければ幸い見逃しているいくつかの注意点があり、それ自体の開発をレールとウェブに新しいです

PS。

ああ、ところで、refileと呼ばれるこの新しい宝石があります。それは驚くべきことであり、場合によっては本当に良い選択肢になります。

関連する問題