2017-04-17 28 views
4

ruby​​ on ruby​​のアクションメーラを使用して電子メールの添付ファイルを送信しようとしていますが、このエラーが発生し続けます。問題は、指定したディレクトリでファイルを見つけることができないが、ファイルパスが有効であるように思える。また、コンソールでFile.exist?を使用してこれを確認し、提供されたパスがtrueであることを確認しました。Errno :: ENOENT - そのようなファイルやディレクトリはありません@ rb_sysopen

class OrderMailer < ApplicationMailer 
    def purchase(order) 
    @order = order 
    attachments[ 'files.zip'] = File.read(Rails.root + '/public/albums/files.zip') 
    mail to: order.email, subject: "Order Confirmation" 
    end 
end 

は私もアクションメーラーのドキュメントの助言として、エンコーディングを処理するために、メールの宝石をインストール:

は、ここに私のメーラーです。

すべてのヘルプははるかに高く評価されるだろう、 -Brian

+0

Rails.root.to_s +「/public/albums/files.zipを」):だから、次のように別の文字列とそれを連結した文字列にそれを必要とするtoconvert/questions/6566884/ruby​​s-file-open-give-no-such-file-or-directory-text-txt-errnoenoent-er –

+0

https://stackoverflow.com/questions/15605782/errnoenoent-no-such-file -or-directory-ruby –

答えて

6

Rails.rootPathnameオブジェクトを返します。 Pathname#+(string)File.joinstringの場合はの場合はパスに、 stringが絶対パス(スラッシュで始まる)を表している場合、パスはに置き換えます。

Pathname.new('/tmp') + 'foo' 
# => #<Pathname:/tmp/foo> 
Pathname.new('/tmp') + '/foo' 
# => #<Pathname:/foo> 

この手段、あなたは間違ったパスから読んでいる:あなたは/path/to/app/public/albums/files.zipを読みたいと思っていますが、実際にはおそらく存在しないはず/public/albums/files.zipを、読んでいます。

ソリューション:あなたは相対パスを追加していることを確認してください。

Rails.root + 'public/albums/files.zip' 
+0

これは完全に機能しました!助けてくれてありがとう! – bdowe

+0

@bdoweあなたはこの答えをダニでマークする必要があると思います。 –

-1

Rails.rootは、パスオブジェクトを返します。これはhttps://stackoverflow.comを助けることができる

関連する問題