我在我的一个邮件服务器中有一行代码,用来添加一个带有用户姓氏和道布的附件.在File.read
方法中,有时会出现类型错误"没有将StringIO隐式转换为字符串".
attachments["#{@user.last_name.downcase}-#{@user.date_of_birth.strftime('%d%m%y')}.jpeg"] = File.read(URI.parse(@user.profile_picture_url).open)
它在大多数情况下都可以工作,但偶尔也会失败,并出现以下错误.我正在使用CarrierWave将文件上传到远程S3存储桶,如果这有什么不同的话.
编辑:
我在控制台中做了一些挖掘,坦率地说,这让我更困惑了!我有两个用户记录,都有通过CarrierWave上传到S3的个人资料照片.如果我只是隔离File.read
方法,并使用两个记录try 它,一个有效,一个无效.判断URI,它们看起来几乎是相同的.
然而,我发现CarrierWave支持读取文件的快捷方式,解决了这个问题.以下是更新后的代码:
attachments["#{@user.last_name.downcase}-#{@user.date_of_birth.strftime('%d%m%y')}.jpeg"] = @user.profile_picture.read