huobazi/carrierwave-qiniu

class or module required for rescue clause

feitian124 opened this issue · 3 comments

Failure/Error: image.save
     TypeError:
       class or module required for rescue clause
     # /home/ming/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/qiniu-rs-1.1.0/lib/qiniu/rs/auth.rb:64:in `rescue in request'
     # /home/ming/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/qiniu-rs-1.1.0/lib/qiniu/rs/auth.rb:62:in `request'
     # /home/ming/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/qiniu-rs-1.1.0/lib/qiniu/rs/rs.rb:27:in `publish'
     # /home/ming/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/qiniu-rs-1.1.0/lib/qiniu/rs.rb:95:in `publish'
     # /home/ming/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/carrierwave-qiniu-0.0.7.1/lib/carrierwave/storage/qiniu.rb:88:in `setup_publish_bucket_and_domain'

您好, 使用这个库时碰到到上述问题, 发现下面这行代码好像不行,

begin
  code, data = Auth.call(url, data)
rescue [MissingAccessToken, MissingRefreshToken, MissingUsernameOrPassword] => e
  Log.logger.error e
  code, data = 401, {}
end

rescue 后面接的是数组貌似不行? 换成Exception => e后旧可以了.
我是用的 ruby 2.2.2

根据 http://stackoverflow.com/questions/5781639/passing-multiple-error-classes-to-rubys-rescue-clause-in-a-dry-fashion
好像正确的语法应该是

rescue *[MissingAccessToken, MissingRefreshToken, MissingUsernameOrPassword]

数组前面要加一个 *号, 且此时好像不能定义变量 e

@feitian124

你贴的这部分代码是 qiniu-rs 这个 gem 内的 代码, qiniu-rs 是早期 qiniu api 的 ruby 实现
qiniu 已经停止维护那个gem了,现在官方改用 qiniu 这个gem,并且 api 中已经不提供自己设置 domain的 接口了。

建议你 升级到最新的 carrierwave-qiniu

是, 原来很早之前就 fork 过您这个repo, 看了 commit 落后很多.
然后呢, 如果 Gemfile 中仅仅指定 gem carrierwave-qiniu, bundle后下载的是一个比较老的版本 0.0.7.x, 恰好和我落后的 repo 对应了,导致我没有发现你这个 gem 已经有新版本.
建议更新 readme, 指定 gem 'carrierwave-qiniu', '~> 0.1.8'.
@huobazi