301 Nach dem Hochladen von S3 dauerhaft verschoben
Ich versuche, Bilder mit Carrierwave- und Nebel-Edelsteinen auf Ruby on Rails auf S3 hochzuladen. Die Bilder werden korrekt hochgeladen, aber wenn ich versuche, das Modell mit Informationen über das gerade hochgeladene Bild zu speichern, erhalte ich folgenden Fehler:
Excon::Errors::MovedPermanently in UserController#show
app/models/user.rb:46:in `process_image_with_key'
app/controllers/user_controller.rb:12:in `show'
<Excon::Response:0x007f97846a3c18 @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>
Benutzermodell:
mount_uploader :image, AvatarUploader
def image_name
File.basename(image.path || image.filename) if image
end
def process_image_with_key( key )
unless key.nil?
self.key = key
self.remote_image_url = self.image.direct_fog_url(with_path: true)
self.save!
end
end
AvatarUploader:
# encoding: utf-8
class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWaveDirect::Uploader
include CarrierWave::RMagick
# Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
include Sprockets::Helpers::RailsHelper
include Sprockets::Helpers::IsolatedHelper
include CarrierWave::MimeTypes
process :set_content_type
version :thumb do
process resize_to_fill: [50, 50]
end
end
Benutzer-Controller
def show
@user = User.find_by_id(params[:id])
@user.process_image_with_key(params[:key])
@uploader = User.new.image
@uploader.success_action_redirect = user_url(@user.id)
end
Carriwerwave Initializer
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
:region => 'us-west-1'
}
config.fog_directory = ENV['AWS_FILE_BUCKET']
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
end
gemfile
gem 'carrierwave'
gem 'rmagick'
gem 'fog'
gem 'carrierwave_direct'