我正在尝试使用ruby on rails上的动作邮件发送电子邮件附件,我一直收到此错误。问题似乎是它无法在我指定的目录中找到该文件,但文件路径有效。我还在控制台中使用File.exist?
检查了这一点,并确认提供的路径的计算结果为true。
这是我的邮件:
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
我还安装了邮件gem来处理编码,正如Action Mailer文档所建议的那样。
非常感谢任何帮助, -Brian
答案 0 :(得分:7)
Rails.root
会返回Pathname
个对象。 Pathname#+(string)
File.join
string
路径为,如果它是相对的;如果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'
答案 1 :(得分:-1)
Rails.root返回路径对象。因此,您需要将其转换为字符串以将其与另一个字符串连接,如下所示: ( Rails.root.to_s +&#39; /public/albums/files.zip')