Comment puis-je obtenir l'URL de base (par exemple http: // localhost: 3000) de mon application Rails?

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

Question

J'utilise Paperclip pour permettre aux utilisateurs de joindre les choses, et je vous envoie un e-mail et de vouloir joindre le fichier à l'e-mail. Je suis en train de lire le fichier et l'ajouter comme une pièce jointe, comme suit:

# 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

Cela me donne l'No such file or directory - /system/files/7/original/image.png?1254497688 d'erreur suivant la trace de la pile en disant qu'il est l'appel à File.read. Lorsque je visite la page show.html.erb, et cliquez sur le lien vers l'image, ce qui est quelque chose comme http://localhost:3000/system/files/7/original/image.png?1254497688, l'image est affichée bien.

Comment puis-je résoudre ce problème?

Était-ce utile?

La solution

asset.url renvoie l'URL du fichier. Cela est généralement /system/classname/xx/xx/style/filename.ext. Vous mettriez cela dans un image_tag.

Vous voulez asset.path. Il renvoie le chemin complet du fichier, qui sera généralement quelque chose comme /home/username/railsapp/public/system/classname/xx/xx/style/filename.ext

HTH.

Autres conseils

En général root_url devrait fournir.

File.read attend un chemin de fichier, pas une URL bien. Si vous générez les images, vous devez appeler le code de génération d'image et retourner les octets de l'image générée au lieu d'appeler File.read(…)

request.env["HTTP_HOST"]

Je ne sais pas pourquoi une ligne de code est si difficile à atteindre sur le web. On dirait qu'il devrait être à l'avant et au centre.

ZiggyTheHamster dit: (. Qui est la raison pour laquelle vous obtenez les barres obliques de répertoire de style unix, comme l'a souligné dans les commentaires) est le asset.url l'URL générée qui serait utilisé sur les pages Web

asset.path devrait vous donner le chemin OS-courant dans le fichier, mais même cela n'est pas nécessaire avec paperclip. Paperclip :: L'attachement est déjà iostream.

Vous avez juste besoin :body => asset comme ceci:

touchpoint.assets.each do |asset|
  attachment :content_type => asset.file_content_type,
             :body => asset
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top