with subir rails image_tag example archivos active ruby-on-rails ruby amazon-s3 carrierwave fog

ruby on rails - subir - Las imágenes de Amazon S3 de niebla de Carrierwave no se muestran.



show image carrierwave (1)

He instalado carrierwave y fog, he subido con éxito las imágenes y las he visto la primera vez, pero ahora ya no muestra las imágenes.

Aquí está mi aplicación de configuración / config / initializers / carrierwave.rb

CarrierWave.configure do |config| config.fog_credentials = { :provider => ''AWS'', # required :aws_access_key_id => ''AKIAJKOHTE4WTXCCXAMA'', # required :aws_secret_access_key => ''some secret key here'', # required :region => ''eu-east-1'', # optional, defaults to ''us-east-1'' :host => ''https://s3.amazonaws.com'', # optional, defaults to nil :endpoint => ''https://s3.amazonaws.com:8080'' # optional, defaults to nil } config.fog_directory = ''createmysite.co.za'' # required config.fog_public = false # optional, defaults to true #config.fog_attributes = {''Cache-Control''=>''max-age=315576000''} # optional, defaults to {} end

Así es como se ve la URL de la imagen que se supone que debe mostrar

<img alt="Normal_selection_003" src="https://createmysite.co.za.s3.amazonaws.com/uploads/portfolio/image/3/normal_Selection_003.png?AWSAccessKeyId=AKIAJKOHTE4WTXCCXAMA&amp;Signature=8PLq8WCkfrkthmfVGfXX9K6s5fc%3D&amp;Expires=1354859553">

al abrir la URL de la imagen que es la salida de Amazon https://createmysite.co.za.s3.amazonaws.com/uploads/portfolio/image/3/normal_Selection_003.png?AWSAccessKeyId=AKIAJKOHTE4WTXCCXAMA&Signature=8PLq8WCkfrkthmfVGfXX9K6s5fc%3D&Expires=1354859553

<Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>3F179B7CE417BC12</RequestId> <HostId> zgh46a+G7UDdpIHEEIT0C/rmijShOKAzhPSbLpEeVgUre1iDc9f7TSOwaJdQpR65 </HostId> </Error>

Actualizar

Nuevo archivo de configuración (caducidad agregada de URL de niebla) app / config / initializers / carrierwave.rb

CarrierWave.configure do |config| config.fog_credentials = { :provider => ''AWS'', # required :aws_access_key_id => ''AKIAJKOHTE4WTXCCXAMA'', # required :aws_secret_access_key => ''chuck norris'', # required } config.fog_directory = ''createmysite.co.za'' # required config.fog_public = false # optional, defaults to true config.fog_authenticated_url_expiration = 600 # (in seconds) => 10 minutes end

¡Funciona de maravilla!


Ha configurado config.fog_public en false y está utilizando Amazon S3 para el almacenamiento. Las URL para archivos privados a través de S3 son temporales (están firmadas y tienen vencimiento). Específicamente, la URL publicada en su pregunta tiene un parámetro Expires=1354859553 .

1354859553 es Fri, 07 Dec 2012 05:52:33 GMT , que está en el pasado desde la hora actual, por lo que el enlace ha caducado efectivamente, por lo que está obteniendo el error Access Denied .

Puede ajustar la caducidad aún más (el valor predeterminado es 600 segundos) configurando

config.fog_authenticated_url_expiration = ... # some integer here

Si quieres enlaces no caducados o bien

  • establece config.fog_public en true
  • send_file que su aplicación actúe como intermediario, sirviendo los archivos a través de send_file . Here hay al menos una pregunta sobre SO que cubre esto