我显然有一个巨大的问题,从插件版本的回形针切换到gem版本在我的应用程序。这是我的印象,应该有一个插件和指定版本的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
这对任何人都有意义吗?为什么插件可以工作,但是相同版本的宝石却破坏了一切?
更新:我似乎也没有任何回形针耙任务可用。什么好主意吗?
事实证明,我们应该检查文件名是否有效,而不是依赖于检测化身存在的通用运行时错误。