Rails Rails 中 ActiveResource 访问 JAVA API 异常.

feichan · 2014年02月18日 · 最后由 litianzzk 回复于 2014年02月19日 · 2454 次阅读

在 rails 项目中,请求 java API 时,可添加图片地址,生成中间带有小 logo 的二维码。

当图片地址为外部链接时,能正常返回相关数据; 但当图片地址为本项目生成的链接 (如:'http://服务器 ip:3008/uploads/1/qr_code/39/297443eecd22d5b873efb180e38869a5.jpg', 该地址在外部可正常访问), 就会出现 TimeOut 错误,但是 java 那边已经正常生成了二维码。

class BaseResource < ActiveResource::Base
  def self.generate_qr
    ......
    options = {
      :method => "WXQRGenerate",
      :accesscode => "someaccesscode"
    }
    data = {
      :publicuserid => "weichatopenid",
      :para => 1201,
      :smallPic => "http://服务器ip:3008/uploads/1/qr_code/39/297443eecd22d5b873efb180e38869a5.jpg"
    }
    result = post(:GWService, options, {data: data}.to_json) # 此处 timeout error
    ActiveSupport::JSON.decode(result.body)
  end
end

我又在该机器上用 ruby 脚本单独写了个文件,参数不变,运行没问题。

这为什么呢,是 rails 里的问题吗?

会不会是图片路径问题?

#1 楼 @TsingHan 图片路径没有问题,可以访问的到的

#1 楼 @TsingHan java 那边能正常生成二维码的,就是无法接到返回的信息

development+webrick?如果是,记得那是因为该模式下面服务器同时只能处理一个请求,如果在一个请求里面又发起新请求(下载图片)调用了自己,新请求需要等待当前请求完成才能被处理,就只能 timeout 了。

#4 楼 @litianzzk rails s,默认用了 thin,-e production,这样还是不行

#6 楼 @lolychee 嗯嗯,明白了,明天试试去,多谢

#4 楼 @litianzzk 试了 development+webrick, 却能正常返回

#8 楼 @feichan 可能现在的行为不一样了吧,我当时用的 rails2 就会那样,后来在 production 模式下面设置成 threadsafe 是没问题的。现在参考@lolychee 给出的链接应该可以解决。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号