validates thoughtbot rails notidentifiedbyimagemagickerror imagenes game errors ruby-on-rails paperclip

ruby-on-rails - thoughtbot - paperclip validates



Obtener URL absoluta para adjuntar clip (7)

De acuerdo con este problema de github , es más limpio usar ActionController::Base.asset_host por lo que resultaría en la ayuda:

def add_host_prefix(url) URI.join(ActionController::Base.asset_host, url) end

Esto supone que tiene en cada archivo /config/environments/<environment>.rb lo siguiente:

Appname::Application.configure do # .... config.action_controller.asset_host = ''http://localhost:3000'' # Locally # .... end

¿Es posible obtener el URI absoluto para un archivo adjunto Paperclip? En este momento, el problema es que el entorno de producción se implementa en un sub-URI (en Passenger: RackBaseURI ), pero <paperclip attachment>.url devuelve el URI relativo a la aplicación Rails ( /system/images/... ). ¿Hay alguna manera de obtener el URI absoluto para los archivos adjuntos de Paperclip?

Estoy usando Paperclip v2.7 y Rails 3.2.8.


Esto no resuelve exactamente el problema del póster original (funciona en la vista, no en el modelo), pero puede ser útil para las personas que intentan "obtener la URL absoluta para el archivo adjunto del clip" en su vista: de la misma manera que

image_tag(user.avatar.url(:large))

pone la imagen en tu vista,

image_url(user.avatar.url(:large))

devuelve solo la URL que necesitará si desea enlazar directamente con el activo (por ejemplo, en una llamada link_to ).


La forma más ampliamente aplicable de hacer esto es definir primero sus hosts de activos en el archivo de configuración / entorno relevante:

config.action_controller.asset_host = "http://assethost.com" config.action_mailer.asset_host = "http://assethost.com"

Luego en vistas y anuncios publicitarios:

asset_url(model.attachment.url(:style))

En la consola:

helper.asset_url(model.attachment.url(:style))

En un modelo:

ApplicationController.helpers.asset_url(model.attachment.url(:style))


Puede agregarlo a su application.rb (o para un entorno específico en config/environments/* ):

config.paperclip_defaults = { url: "http://my.address.com/system/:class/:attachment/:id_partition/:style.:extension", path: '':rails_root/public/system/:class/:attachment/:id_partition/:style.:extension'', }

Reinicia y reimporta tus imágenes.

PD: obviamente puedes reemplazar http://my.address.com con una variable de entorno.


Puedes hacerlo:

<%= image_tag "#{request.protocol}#{request.host_with_port}#{@model.attachment_name.url(:attachment_style)}" %>

O haz un método de ayuda para envolverlo.

def absolute_attachment_url(attachment_name, attachment_style = :original) "#{request.protocol}#{request.host_with_port}#{attachment_name.url(attachment_style)}" end

Y úsalo así:

<%= image_tag absolute_attachment_url(attachment_name, :attachment_style)}" %>

Ejemplo: Modelo = Persona (@person), nombre_ajunto = avatar, estilo =: pulgar

<%= image_tag absolute_attachment_url(@person.avatar, :thumb)}" %>


tratar

URI.join(request.url, @model.attachment_name.url)

o

URI(request.url) + @model.attachment_name.url

Es seguro si usas S3 o URL absoluta.

Actualización: esta respuesta es mejor que la mía;) https://.com/a/21027839/683157