将Paperclip从插件更新到gem的问题

时间:2011-07-21 20:55:54

标签: ruby-on-rails rubygems paperclip ruby-on-rails-plugins

我显然遇到了一个巨大的问题,从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

这对任何人都有意义吗?为什么插件会工作,但同一版本的宝石只会破坏一切?

更新:我似乎也没有任何回形针佣金可用任务。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

事实证明,我们应该检查文件名是否有效,而不是依赖于检测头像存在的通用运行时错误。