class or module required for rescue clause
feitian124 opened this issue · 3 comments
feitian124 commented
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
feitian124 commented
根据 http://stackoverflow.com/questions/5781639/passing-multiple-error-classes-to-rubys-rescue-clause-in-a-dry-fashion
好像正确的语法应该是
rescue *[MissingAccessToken, MissingRefreshToken, MissingUsernameOrPassword]
数组前面要加一个 *
号, 且此时好像不能定义变量 e
huobazi commented
你贴的这部分代码是 qiniu-rs 这个 gem 内的 代码, qiniu-rs 是早期 qiniu api 的 ruby 实现
qiniu 已经停止维护那个gem了,现在官方改用 qiniu 这个gem,并且 api 中已经不提供自己设置 domain的 接口了。
建议你 升级到最新的 carrierwave-qiniu
feitian124 commented
是, 原来很早之前就 fork 过您这个repo, 看了 commit 落后很多.
然后呢, 如果 Gemfile 中仅仅指定 gem carrierwave-qiniu, bundle后下载的是一个比较老的版本 0.0.7.x, 恰好和我落后的 repo 对应了,导致我没有发现你这个 gem 已经有新版本.
建议更新 readme, 指定 gem 'carrierwave-qiniu', '~> 0.1.8'.
@huobazi