Как правило, лучший способ сделать это - сохранить в своей базе данных информацию о ходе выполнения задания. Например:
class User
def perform_calculation
begin
self.update_attributes :calculation_status => 'started'
do_something_complex
self.update_attributes :calculation_status => 'success'
rescue Exception => e
self.update_attributes :calculation_status => 'error'
end
end
end
Чтобы при постановке в очередь:
User.update_attributes :calculation_status => 'enqueued'
User.send_later :perform_calculation
Вы можете запросить в вашем контроллере статус задания:
def check_status
@user = User.find(params[:id])
render :json => @user.calculation_status
end
Вы, опрашивая процесс ajax, можете просто вызвать check_status, чтобы увидеть, как продвигается задание, успешно ли оно выполнено или не удалось.