Comment puis-je obtenir l'URL de base (par exemple http: // localhost: 3000) de mon application Rails?
-
19-09-2019 - |
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?
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