2

我在控制器中有一个方法,它调用在模块中创建的另一个方法,如下例所示:

  def example
    @var1 = ModuleName::ClassName.get()

    respond_to do |format|
      format.json { render json: @var1}
    end
  end

get() 方法去一个网站寻找信息并返回一个数组。一切正常,但我想知道如果应用程序需要很长时间才能运行,控制器中是否有设置超时的方法!是否可以?

4

2 回答 2

2

这是一种方法(一种更通用的方法)你可以做到这一点..

def example
 Timeout::timeout(40) do  # 40 sec, change it to anything you like
   @var1 = ModuleName::ClassName.get()
 rescue Timeout::error
   # do something (maybe set @var1's value if it couldn't get desired array)
 end
 respond_to do |format|
  format.json { render json: @var1}
 end
end
于 2012-05-11T11:21:37.403 回答
0

如果在 ModuleName::ClassName.get() 下暗示某种第三方 ruby​​ http 库,那么很可能您应该设置某种timeout参数(取决于库)。您只需在几秒钟内通过所需的超时(或您想要的任何测量值)。

因此伪代码可能如下所示:

ModuleName::ClassName.get(10)

有关更详细的答案,您能否更具体地了解您如何致电外部服务?

于 2012-05-11T11:16:56.607 回答