Come faccio a ottenere l'URL di base (ad esempio, http: // localhost: 3000) del mio Rails app?

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

Domanda

sto usando Paperclip per consentire agli utenti di collegare le cose, e poi sto inviando una e-mail e di voler allegare il file al messaggio di posta elettronica. Sto cercando di leggere il file e aggiungerlo come allegato, in questo modo:

# 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

Questo mi dà il seguente errore No such file or directory - /system/files/7/original/image.png?1254497688 con l'analisi dello stack dicendo che è la chiamata a File.read. Quando visito pagina show.html.erb, e fare clic sul link per l'immagine, che è qualcosa di simile http://localhost:3000/system/files/7/original/image.png?1254497688, l'immagine viene visualizzata bene.

Come posso risolvere questo problema?

È stato utile?

Soluzione

asset.url restituisce l'URL del file. Questo è di solito /system/classname/xx/xx/style/filename.ext. Faresti mettere questo in un image_tag.

Si desidera asset.path. Si restituisce il percorso completo del file, che di solito è qualcosa di simile a /home/username/railsapp/public/system/classname/xx/xx/style/filename.ext

HTH.

Altri suggerimenti

In genere root_url dovrebbe fornire questo.

File.read si aspetta un percorso di file, non un URL però. Se si sta generando le immagini, è necessario chiamare il codice di generazione di immagine e restituire i byte l'immagine generata invece di chiamare File.read(…)

request.env["HTTP_HOST"]

Non so il motivo per cui questa riga di codice è così sfuggente sul web. Sembra che dovrebbe essere fino davanti e al centro.

come ZiggyTheHamster sta dicendo: (. Ed è per questo che stai ricevendo la directory barre di tipo UNIX, come sottolineato nei commenti) l'asset.url è l'URL generato che sarebbe stato utilizzato su pagine web

asset.path dovrebbe darvi il percorso OS-aware al file, ma anche questo non è necessaria con graffetta. Paperclip :: L'attaccamento è già un iostream.

Hai solo bisogno :body => asset in questo modo:

touchpoint.assets.each do |asset|
  attachment :content_type => asset.file_content_type,
             :body => asset
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top