どのように私は、ベースURLを取得します(たとえば、のhttp:// localhostを:3000)私のRailsアプリの?
-
19-09-2019 - |
質問
私は、ユーザーが物事を添付できるようにするためにペーパークリップを使用しています、そして私は、電子メールを送信し、電子メールにファイルを添付したいんです。私は、ファイルを読み込むと、添付ファイルとして追加しようとしているので、同様ます:
# 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
これは私にそれがNo such file or directory - /system/files/7/original/image.png?1254497688
への呼び出しだと言ってスタックトレースを次のエラーFile.read
を与えます。私はshow.html.erb
ページを訪問し、http://localhost:3000/system/files/7/original/image.png?1254497688
のようなものがある画像へのリンクをクリックすると、画像が正常に表示されます。
私はこの問題を解決することができますか?
解決
asset.url
は、ファイルへのURLを返します。これは通常/system/classname/xx/xx/style/filename.ext
です。あなたはimage_tag
でこれを置くところます。
あなたはasset.path
をしたいです。これは通常/home/username/railsapp/public/system/classname/xx/xx/style/filename.ext
ようになりますファイルへのフルパスを返します。
HTHます。
他のヒント
通常root_url
は、これを提供する必要があります。
File.readはしかし、ファイルパスではなくURLを期待しています。あなたが画像を生成する場合は、画像生成コードを呼び出し、代わりにFile.read(…)
を呼び出すのでは生成された画像のバイトを返す必要があります。
request.env["HTTP_HOST"]
このコードの1行がウェブ上でとてもわかりにくい理由私は知りません。それはフロントとセンターアップする必要がありますように思えます。
ZiggyTheHamsterが言っているよう:asset.urlは、Webページ上で使用される生成されたURLです(コメントで指摘したようにあなたは、UNIXスタイルのディレクトリのスラッシュを取得している理由である。)
asset.pathはあなたのファイルへのOS対応のパスを与える必要がありますが、それでもそれはクリップで必要とされていません。 ペーパークリップ::添付ファイルはすでにのIOStreamです。に
あなただけのように同じよう:body => asset
必要があります。
touchpoint.assets.each do |asset|
attachment :content_type => asset.file_content_type,
:body => asset
end