2011-05-27 88 views
0

我想與heroku和s3一起使用回形針,但我有許多表格可以與照片相關聯,我們將使用:review for example。 我試圖從評論中分離出照片並單獨上傳,但由於我是紅寶石新手,我認爲我失敗了。 我已安裝並捆綁'aws-s3'gem。紅寶石回形針到s3錯誤

這是我得到的錯誤:

LoadError in ReviewsController#create 

no such file to load -- aws/s3 (You may need to install the aws-s3 gem) 
Rails.root: C:/www/devise 

Application Trace | Framework Trace | Full Trace 
app/controllers/reviews_controller.rb:56:in `new' 
app/controllers/reviews_controller.rb:56:in `block in create' 
app/controllers/reviews_controller.rb:54:in `create' 
app/controllers/redirect_back.rb:23:in `store_location' 
This error occurred while loading the following files: 
    aws/s3 

照片型號:

class Photo < ActiveRecord::Base 
     belongs_to :user 
     belongs_to :shop 
     belongs_to :baristum 
     belongs_to :review 

     #paperclip 
     has_attached_file :photo, 
      :styles => { 
      :thumb=> "100x100#", 
      :small => "400x400>", 
      :original => "800x800" }, 
     :storage => :s3, 
     :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
     :path => "/:style/:id/:filename" 

    end 

照片模式:

t.string "file_name" 
    t.string "content_type" 
    t.integer "file_size" 
    t.integer "user_id" 
    t.integer "barista_id" 
    t.integer "review_id" 
    t.integer "shop_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 

審查控制器:

def create 
    #add the current user to the review hash, from the session var. 
    params[:review][:user_id] = current_user.id 

    #move the photo to another var, so I can remove it from the review insert 
    @photoUpload = params[:review][:photo] 
    params[:review].delete("photo") 

    @review = Review.new(params[:review]) 

    respond_to do |format| 
     if @review.save 
     @photo = Photo.new(:photo => @photoUpload, :review_id => @review.id) 
     @photo.save 

     format.html { redirect_to(@review, :notice => 'Review was successfully created.') } 
     format.xml { render :xml => @review, :status => :created, :location => @review } 
     else 
     @shopList = Shop.find(:all) 
     format.html { render :action => "new" } 
     format.xml { render :xml => @review.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

的Gemfile

source 'http://rubygems.org' 

gem 'pg' 
gem 'rake', '~> 0.8.7' 
gem 'rails', '3.0.5' 
#gem 'sqlite3-ruby', :require => 'sqlite3' 
gem 'devise', :git => 'git://github.com/plataformatec/devise', :branch => 'master' 
gem 'omniauth', '0.2.0' 
gem 'paperclip' 
#gem 'RMagick' 
gem "simple_form", "~> 1.2.2" 
gem 'twitter_oauth', '0.4.3' 
gem "rest-client", "1.6.1", :require => "restclient" 
gem "sluggable" 
gem 'gmaps4rails' 
gem 'exception_notification', :require => 'exception_notifier' 
gem 'yaml_db' 
#gem 'mysql' 
gem 'aws-s3' 


#gem 'carrierwave' 
#gem 'fog' #amazon s3 
#gem 'nokogiri' 

group :development, :test do 
gem 'rspec-rails' 
gem 'fixjour' 
end 
+0

你能顯示你的寶石文件或gem.lock文件嗎? – fedesoria 2011-05-28 00:23:47

+0

好的,我已經在上面貼出來了。 – 2011-05-28 15:52:55

+0

我能問一下爲什麼你不使用霧來完成這項任務嗎? – cjm2671 2011-10-12 13:48:50

回答

0

看起來你需要在你的照片模式中的以下字段。

t.string :file_file_name 
    t.string :file_content_type 
    t.integer :file_file_size 
    t.datetime :file_updated_at 

運行,這將產生一個遷移爲你做到這一點

#this convention: rails generate paperclip [model] [attachmentname] 
    rails generate paperclip photo file 

你必須有這種約定的回形針來接他們下命名的表列:「attachmentname'_file_name」 attachmentname'_content_type等等......你在哪裏調用你的照片模型的has_attachment「文件」。

1

當您在您的gem文件中包含'aws-s3'寶石時,請記得添加require語句。

gem 'aws-s3', :require => 'aws/s3' 
1

當前回形針的版本使用aws-sdk寶石,而不是aws-s3寶石。

嘗試運行該寶石的最新版本,並結合最新版本的支持您的Rails堆棧的Paperclip(Paperclip 2.x for Rails 2.3或Paperclip 3.x for Rails 3+)。