我显然遇到了一个巨大的问题,从Paperclip的插件版本切换到我的应用程序中的gem版本。我的印象是插件和指定版本的宝石之间应该没有任何区别。但是,我并不认为这是一个简单的过渡。
Rails 2.3.11,Ruby 1.8.7
我使用的插件版本是2.3.3版本,并于2010年8月2日升级。尝试将此更新到相同版本的gem基本上杀死了我的所有测试,无法加载工厂模型没有加载附件。似乎validate_attachment_content_type也试图验证附件存在,但找不到它,所以一切都刚刚开始破坏。再次,使用插件没有问题,我一直在使用它的所有这些都没有任何问题。另一方面,这个问题似乎不会发生在2.3.4版本之后。这是另外一组问题。
基本上,在2.3.4及更高版本的所有版本中,我都会遇到以下问题:
can't convert nil into String
/home/joshua/.rvm/gems/ruby-1.8.7-p334@paperclip_upgrade/gems/paperclip-2.3.15/lib/paperclip/storage/s3.rb:163:in `extname'
/home/joshua/.rvm/gems/ruby-1.8.7-p334@paperclip_upgrade/gems/paperclip-2.3.15/lib/paperclip/storage/s3.rb:163:in `to_file'
/home/joshua/.rvm/gems/ruby-1.8.7-p334@paperclip_upgrade/gems/paperclip-2.3.15/lib/paperclip/attachment.rb:94:in `assign'
/home/joshua/.rvm/gems/ruby-1.8.7-p334@paperclip_upgrade/gems/paperclip-2.3.15/lib/paperclip.rb:279:in `avatar='
/home/joshua/railscamp/app/app/models/organization.rb:311:in `copy_membership'
在我访问我的组织模型的所有测试中。
在这种情况下,明显有问题的代码是试图将会员模型从一个组织克隆到另一个组织,*行是违规的呼叫。
def copy_membership(membership)
m = membership.clone
u = m.user.clone
u.organization = self
m.organization = self
begin
m.avatar = membership.avatar *
rescue RuntimeError
m.avatar = nil
end
m.user = u
m.save
m
end
这对任何人都有意义吗?为什么插件会工作,但同一版本的宝石只会破坏一切?
更新:我似乎也没有任何回形针佣金可用任务。有什么想法吗?
答案 0 :(得分:1)
事实证明,我们应该检查文件名是否有效,而不是依赖于检测头像存在的通用运行时错误。