2010-03-03 30 views
10

hầu hết các ứng dụng của tôi có liên quan đến dịch vụ web và thường do trang web của bên thứ ba, tôi gặp phải vấn đề thời gian chờ.Cách giải quyết các vấn đề thời gian chờ (Ruby, Rails)

Đây là lỗi mà tôi nhận được:

execution expired 
    /usr/lib/ruby/1.8/timeout.rb:54:in `rbuf_fill' 

Làm thế nào để cứu loại hình báo lỗi trong một ứng dụng đường ray?

Trả lời

28

Tùy thuộc vào cách bạn sử dụng thư viện, có nhiều cách khác nhau để giải cứu các ngoại lệ.

Trong thư viện

Giả sử bạn đã tạo một wrapper để truy cập một số loại dịch vụ web, bạn có thể có các wrapper cứu ngoại lệ và luôn luôn trả về một "an toàn" dữ liệu.

Trong hành động

Nếu bạn gọi một phương thức cụ thể trong hành động và sự thành công phương pháp là một yêu cầu đối với các hành động, sau đó bạn có thể cứu nó trong hành động. Trong ví dụ sau, tôi giải quyết lỗi và hiển thị một mẫu cụ thể để xử lý sự cố.

def action 
    perform_external_call 
rescue Timeout::Error => e 
    @error = e 
    render :action => "error" 
end 

Trong bộ điều khiển

Nếu cuộc gọi phương pháp có thể xảy ra trong nhiều hành động khác nhau, bạn có thể muốn sử dụng rescue_from.

class TheController < ApplicationController 

    rescue_from Timeout::Error, :with => :rescue_from_timeout 

    protected 

    def rescue_from_timeout(exception) 
    # code to handle the issue 
    end 

end 
2

đây là những gì tôi làm trong đường ray ứng dụng của tôi:

# in ApplicationController 
rescue_from Your::Exception, :with => :handle_exception 

protected 

def handle_exception 
    # do anything you want here 
end 

Bạn có thể chỉ định các ngoại lệ như bạn sẽ làm trong một điều khoản giải cứu tất nhiên.

Greetings, Joe

+1

Chưa bao giờ giải cứu 'Exception'. Là một thói quen lập trình xấu. Bạn nên giải cứu các ngoại lệ cụ thể hoặc ít nhất, 'StandardError'. –

+1

"Ngoại lệ" có nghĩa là để làm rõ nơi để nắm bắt một cụ thể, nhưng bạn nói đúng, điều này nên đã được rõ ràng hơn! :) – xijo

+0

Tôi đã biết cách làm điều này với ActiveRecord không tìm thấy. Tôi chỉ không biết những gì hoặc làm thế nào để giải cứu lỗi cụ thể đó. – kgpdeveloper

4

Sử dụng tuyệt vời Rack::Timeout đá quý cho các ứng dụng rack của bạn

Sau đó sử dụng Simone của bộ điều khiển tốt lành

Các vấn đề liên quan