carrierwave backgrounder s3 recreate_versions

时间:2016-02-04 20:39:51

标签: ruby-on-rails amazon-s3 carrierwave

我试图遵循https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Recreate-and-reprocess-your-files-stored-on-fog说明,但我遇到了错误。我的文件名为hat.jpg

我使用了carrierwave_backgrounder,所以我需要这些说明才能立即处理。

with_avatar.each do |instance|
    begin
      instance.process_avatar_upload = true
      instance.avatar.cache_stored_file!
      instance.avatar.retrieve_from_cache!(instance.avatar.cache_name)
      instance.avatar.recreate_versions!
      instance.save!
    rescue => e
      Rails.logger.info("ERROR: UserAvatar: #{instance.id} -> #{e}")
    end
  end

所以,我一次在我的控制台上尝试了一行。如果我设置process_avatar_upload = true,则下一行失败

undefined method `cached?' for nil:NilClass

如果我再次运行相同的命令,我会

undefined method `content_length' for nil:NilClass

最后,如果我第三次跑,它似乎工作。但是,当我到达recreate_versions时!我明白了:

No such file or directory [my file path]/uploads/tmp/1454615129-9112-7053/square_hat.jpg

这是正确的,没有正方形,因为那是我试图创造的东西。

如何在s3上重新创建我的版本?我有很多事要做。感谢。

1 个答案:

答案 0 :(得分:1)

这应该足够了:

instance.process_avatar_upload = true
instance.avatar.recreate_versions!

参考: https://github.com/carrierwaveuploader/carrierwave/blob/master/lib/carrierwave/uploader/versions.rb#L216

如果你使用官方宝石,这是相当古老的(0.10.0)你应该给大师一个机会。如果您没有像:from_version => :foo这样的特殊版本设置或者像

这样的嵌套版本
version :foo do
  version :foobar do
    [...]
  end
end

它应该像以前一样工作。 (但在非生产中尝试(!))