2011-09-17 4 views
1

heroku에 ROR 앱이 있습니다. 앱에 8 개의 선택 가능한 텍스트 필드가 있습니다. 사용자가 요구 사항에 따라 채우거나 비울 수 있습니다.heroku : heroku에 데이터를 게시 할 때 시간 제한을 피하는 방법

사용자가 입력하는 텍스트 필드가 많을수록 더 많은 프로세스가 필요합니다. 내 응용 프로그램은 5 개 이상의 필드가 채워져 Heroku 시간 초과가 발생하면 30 초 이상 요청을 처리합니다.

이 문제를 해결할 수있는 해결책이 있습니까?

자바 스크립트와 아약스를 사용하면 요청을 두 부분으로 나눌 수 있다고 들었습니다. 타임 아웃 문제를 피할 수 있다고 생각합니다. 그러나, 나는 그것을하는 방법을 모르겠다.

감사합니다.

+1

8 개의 입력란 중 5 개 입력란에 양식을 제출하면 서버가 시간 초과됩니까? 양식 데이터로 무엇을하고 있습니까? – Alex

답변

0

백그라운드 작업으로 처리하기 만하면됩니다. Heroku에서는 매우 쉽습니다. Resque + Redis를 사용하지만 DelayedJob을 사용할 수도 있습니다. Resque (github에서 작성)은 Redis (키 값 저장소)의 맨 위에있는 대기열입니다. DelayedJob으로 큐잉하는 것보다 규모를 조정하는 것이 훨씬 쉽지만, 어느 방법 으로든 작동합니다.

  1. 먼저 무료로 Heroku Redis to Go addon을 설치하십시오.
  2. 그러면 Redis To Go의 Resque with Redis on Heroku blog Post을 따라 보석 등을 설정하십시오.

    1. 후 양식 데이터를 : 그 일단

    여기에 당신이해야 할 전부, 설정입니다.

  3. 나중에 처리 할 처리되지 않은을 저장하십시오.
  4. 대기열에 항목을 추가했다고 Resque에게 알립니다. 양식은 사용자 생성 양식을 경우

코드는 다음과 같을 수 있습니다

module SaveUser 
    @queue = :save_user 

    def perform(attributes = {}) 
    user = User.create(attributes) 
    user.process! if user && !user.processed_everthing? 
    end 
end 

def create 
    Resque.enqueue(SaveUser, params[:user]) 
end 

... 당신은 또한 다음과 같은합니다 (PARAMS, 큐에 단지 id을하지 저장처럼 쓸 수)

module SaveUser 
    @queue = :save_user 

    def perform(id) 
    user = User.find(id) 
    user.process! if user && !user.processed_everthing? 
    end 
end 

def create 
    user = User.create(params[:user]) 
    Resque.enqueue(SaveUser, user.id) 
end 

모든 것을 대기열에 넣으면 사용자는 거의 즉시 다음 페이지로 이동합니다.

사용자가 다음 페이지에서 즉시 처리 결과를 확인해야하는 경우, 다른 것을 알아 내야 할 것입니다.

+0

진심으로 감사드립니다! 당신의 조언이 도움이 될 것 같아요.내가 지시를 다음과 cmd를 실행하는 동안 그러나 : $ 레이크 resque : 후 - 브라이언 - 맥북 : 브라이언 nextptt $ 레이크 resque : 작업 큐를 = * 몇 가지 문제가있는 작업 대기열 = * - 추적 레이크 중단되었습니다! yajl-ruby 또는 json gem을 설치하십시오. 어떻게해야합니까? 감사합니다. – Brian

1

사용자 관점에서 지연되는 것은 허용되지 않습니다.

Resque 또는 DelayedJob을 사용하여 작업자에게 양식 처리를 위임해야합니다.

관련 문제