¿Cómo puedo obtener la URL base (por ejemplo, http: // localhost: 3000) de mi aplicación Rails?

StackOverflow https://stackoverflow.com/questions/1510318

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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top