どのように私は、ベースURLを取得します(たとえば、のhttp:// localhostを:3000)私のRailsアプリの?

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

質問

私は、ユーザーが物事を添付できるようにするためにペーパークリップを使用しています、そして私は、電子メールを送信し、電子メールにファイルを添付したいんです。私は、ファイルを読み込むと、添付ファイルとして追加しようとしているので、同様ます:

# 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top