2012-05-17 5 views
7

Ich habe versucht, Carrierwave mit Amazon S3 zu arbeiten. stattcarrierwave, Excon :: Fehler :: MovedPermanently in RegistrationsController # Update Fehler

storage :s3 

ich habe

storage :fog 

es um die Lagerung zu ändern: s3 gibt einen sofortigen Fehler

https://stackoverflow.com/questions/10629827/carrierwave-cant-convert-nil-into-string-typeerror-when-using-s3

so dass ich es um die Lagerung verändert: Nebel wie die rdoc unten sagt .

http://rubydoc.info/gems/carrierwave/frames

aber wenn ich versuche, ein Bild zu, erhalte ich diese verrückten Fehler. Ich benutze auch den Devise-Edelstein.

mein voller Stack-Trace ist

Excon::Errors::MovedPermanently in RegistrationsController#update 

Excon::Errors::MovedPermanently (Expected(200) <=> Actual(301 Moved Permanently) 
    request => {:connect_timeout=>60, :headers=>{"Content-Length"=>95472, "Content-Type"=>"image/jpeg", "x-amz-acl"=>"private", "Cache-Control"=>"max-age=315576000", "Date"=>"Thu, 17 May 2012 05:28:55 +0000", "Authorization"=>"AWS AKIAIN6SC3YSGBSUKV4Q:kZOG9mG01jYn48ImFMYbgxAAQRk=", "Host"=>"user.a.777.s3-eu-west-1.amazonaws.com:443"}, :instrumentor_name=>"excon", :mock=>false, :read_timeout=>60, :retry_limit=>4, :ssl_ca_file=>"/Users/sasha/.rvm/gems/ruby-1.9.3-p125/gems/excon-0.13.4/data/cacert.pem", :ssl_verify_peer=>true, :write_timeout=>60, :host=>"user.a.777.s3-eu-west-1.amazonaws.com", :path=>"/uploads%2Fuser%2Fimage%2F59%2Fidea.jpg", :port=>"443", :query=>nil, :scheme=>"https", :body=>#<File:/Users/sasha/Desktop/rails_projects/blue_eyes/public/uploads/tmp/20120516-2228-19160-9893/idea.jpg>, :expects=>200, :idempotent=>true, :method=>"PUT"} 
    response => #<Excon::Response:0x007fd72a146820 @body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>PermanentRedirect</Code><Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message><RequestId>F5F5AF888E837622</RequestId><Bucket>user.a.777</Bucket><HostId>IShK3GIthzCQysLOKXnR+ijJiHmMuUtXBOpFxQM4uCvJgkEHfmFn43LL4oWmpT82</HostId><Endpoint>s3.amazonaws.com</Endpoint></Error>", @headers={"x-amz-request-id"=>"F5F5AF888E837622", "x-amz-id-2"=>"IShK3GIthzCQysLOKXnR+ijJiHmMuUtXBOpFxQM4uCvJgkEHfmFn43LL4oWmpT82", "Content-Type"=>"application/xml", "Transfer-Encoding"=>"chunked", "Date"=>"Thu, 17 May 2012 05:29:00 GMT", "Connection"=>"close", "Server"=>"AmazonS3"}, @status=301>): 
    app/controllers/registrations_controller.rb:30:in `update' 

ich weiß nicht, was das auch bedeutet.

in meinem initializers/carrierwave.rb ich habe ..

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    :provider    => 'AWS',  # required 
    :aws_access_key_id  => 'somekey',  # required 
    :aws_secret_access_key => 'secretkey',  # required 
    :region     => 'eu-west-1' # optional, defaults to 'us-east-1' 
    } 
    config.fog_directory = 'bucket.name'      # required 
    #config.fog_host  = 'https://s3.amazonaws.com'   # optional, defaults to nil 
    config.fog_public  = false         # optional, defaults to true 
    config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {} 
end 

und meine Uploader-Datei hat

#storage :s3 
    storage :fog 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

mein Juwel Datei hat

gem 'carrierwave' 
gem 'thin' 
gem 'fog' 

, wenn ich meine Server booten Anstelle von webrick verwendet es auch dünn in der Entwicklung.

sind meine Konfigurationen falsch? Hilfe würde sehr geschätzt werden! ive war super stecken auf dieser Carrierwave/s3 Problem

Antwort

17

Ich lief in die früher heute und es war ein Problem mit der Region. Nehmen Sie es einfach heraus und lassen Sie es standardmäßig einstellen.

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    :provider    => 'AWS',  # required 
    :aws_access_key_id  => 'somekey',  # required 
    :aws_secret_access_key => 'secretkey'  # required 
    } 
    config.fog_directory = 'bucket.name'      # required 
    #config.fog_host  = 'https://s3.amazonaws.com'  # optional, defaults to nil 
    config.fog_public  = false        # optional, defaults to true 
    config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {} 
end 
+1

danke! das ist, was ich aufgewickelt habe auch zu tun =) – Sasha

2

Für mich war diese Konfiguration

config.fog_directory = 'bucket_name'     
config.fog_host  = 'https://s3-eu-west-1.amazonaws.com/bucket_name'  
+0

danke! total gearbeitet. – svs

2

ich hatte das gleiche Problem.

Die folgenden 3 Schritte funktionierten für mich.

if Rails.env.production? 
    CarrierWave.configure do |config| 
    config.fog_credentials = { 
     :provider    => 'AWS', 
     :aws_access_key_id  => ENV['S3_ACCESS_KEY'], 
     :aws_secret_access_key => ENV['S3_SECRET_KEY'], 
     :region => ENV['S3_REGION'] 
    } 
    config.fog_directory  = ENV['S3_BUCKET'] 
    end 
end 

3. Konfigurieren Heroku in der Befehlszeile (wie unten gezeigt)

initializers/carrierwave.rb

1.Change Der Standardbereich, wenn ein Eimer

2.Edit meine carrierwave.rb Datei erstellen wie in: heroku config:set S3_REGION='your region'

0

Genau wie @Jason Bynum sagte, nicht die Region angeben und lassen Sie es standardmäßig.

Wenn Sie noch scheitern keine Sorge, Zu diesem Zeitpunkt Heroku wird Tip geben Ihnen your region specified is wrong and should be xxx wie

Und Sie wissen, wie die Region jetzt :)

Die folgenden für Arbeit füllen me:

CarrierWave.configure do |config| 
    config.fog_credentials = { 
     provider:    'AWS',      # required 
     aws_access_key_id:  ENV['S3_KEY'],      # required 
     aws_secret_access_key: ENV['S3_SECRET'],      # required 
     region:    'ap-southeast-1',     # optional, defaults to 'us-east-1' 

    } 
    config.fog_directory = 'your_bucket_name'       # required 
    config.fog_public  = false          # optional, defaults to true 
    config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" } # optional, defaults to {} 
end 

Gemfile:

gem 'carrierwave', '0.10.0' 
gem 'fog', '1.36.0'