301 Déplacé de manière permanente après le téléchargement de S3
Im essayant de télécharger des images vers S3 sur Ruby on Rails à l'aide de carrierwave et le brouillard gemmes, les images sont téléchargées correctement, mais lorsque je tente tu d'enregistrer le modèle contenant des informations sur l'image qui vient d'être téléchargé Im obtenir cette erreur:
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>
De l'utilisateur modèle:
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
De l'utilisateur contrôleur
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 initialiseur
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'
source d'informationauteur p1nox
Vous devez vous connecter pour publier un commentaire.
C'est l'un des plus fréquemment rencontrés question: Vous essayez d'accéder à un seau dans la région nous-ouest-1cependant, pour des raisons d'héritage par défaut Amazon S3 région dans la plupart/tous AWS Sdk est NOUS Standardqui achemine automatiquement les demandes d'installations de Virginie du Nord ou du nord-ouest Pacifique à l'aide des cartes de réseau (voir Les régions et les points de terminaison pour plus de détails).
Donc vous suffit de spécifier le point de terminaison de votre seaux région explicitement avant d'utiliser l'API S3, par exemple pour nous-ouest-1:
Merci encore à Steffen Opel!
Mais certains l'examen je n'ai pas fait, ma région est la Norme américaine, donc, mon carrierwave initialiseur ressemble à ceci:
# :région => # PAS REQUIS PAR la NORME américaine
:endpoint => 'https://s3.amazonaws.com'
Ce lien a la clé 😀