¿Cómo puedo obtener la URL base (por ejemplo, http: // localhost: 3000) de mi aplicación Rails?
-
19-09-2019 - |
Pregunta
Estoy usando Paperclip para permitir a los usuarios conectar cosas, y luego estoy enviando un correo electrónico y con ganas de adjuntar el archivo al correo electrónico. Estoy intentando leer el archivo y añadirlo como un archivo adjunto, así:
# models/touchpoint_mailer.rb
class TouchpointMailer < ActionMailer::Base
def notification_email(touchpoint)
recipients "me@myemail.com"
from "Touchpoint Customer Portal <portal@touchpointclients.com>"
content_type "multipart/alternative"
subject "New Touchpoint Request"
sent_on Time.now
body :touchpoint => touchpoint
# Add any attachments the user has included
touchpoint.assets.each do |asset|
attachment :content_type => asset.file_content_type,
:body => File.read(asset.url)
end
end
end
Esto me da la siguiente No such file or directory - /system/files/7/original/image.png?1254497688
error con el seguimiento de la pila diciendo que es la llamada a File.read
. Cuando visito la página show.html.erb
, y haga clic en el enlace a la imagen, que es algo así como http://localhost:3000/system/files/7/original/image.png?1254497688
, la imagen se visualiza bien.
¿Cómo puedo solucionar este problema?
Solución
asset.url
devuelve la URL al archivo. Esto se hace generalmente /system/classname/xx/xx/style/filename.ext
. Se podría poner esto en un image_tag
.
¿Quieres asset.path
. Se devuelve la ruta completa al archivo, que normalmente será algo así como /home/username/railsapp/public/system/classname/xx/xx/style/filename.ext
HTH.
Otros consejos
Normalmente root_url
debe proporcionar esto.
File.read espera una ruta de archivo, no una url sin embargo. Si va a generar las imágenes, se debe llamar al código de generación de imágenes y devolver los bytes de la imagen generada en lugar de llamar File.read(…)
request.env["HTTP_HOST"]
No sé por qué esto una línea de código es tan difícil de alcanzar en la web. Parece que debería estar al frente y al centro.
como ZiggyTheHamster está diciendo: (. Es por eso que usted está recibiendo las barras de directorio de tipo Unix, como se ha señalado en los comentarios) el asset.url es la URL generada que se utilizaría en las páginas web
asset.path debe darle la ruta SO compatible con el archivo, pero incluso eso no es necesario con un clip. Paperclip :: adjuntos ya es un iostream.
Sólo tiene :body => asset
este modo:
touchpoint.assets.each do |asset|
attachment :content_type => asset.file_content_type,
:body => asset
end