Delayed Job과 같은 작업 대기열로 보내면 요청/응답주기 밖에서 수행되므로 데이터를 수락 할 수 있고 사용자를 기다리지 않고 처리 한 후 레코드를 저장하거나 (유효한 경우) 또는 유효하지 않으면 폐기하십시오.
물론 폐기해야하는 경우 사용자에게 문제가 있음을 알리는 다른 조치를 취하는 것이 좋습니다. 요청을 벗어난 것이므로 나중에 페이지에서 사용자의 관심을 끌거나 (플래시 메시지일까요?) 이메일을 보내야합니다.
편집 : 더 설명하기 :
나는 unverified_url뿐만 아니라 URL라는 컬럼을 만들 것입니다, 다음
require 'net/http'
require 'uri'
after_save :verify_url_later
def verify_url_later
self.delay.verify_url
end
def verify_url
if !unverified_url.match(/127.0.0.1|localhost/) && fetch(unverified_url)
# all good, save to publicly-accessible url
self.update_attributes(:url => unverified_url, :unverified_url => nil)
else
UserMailer.bad_url_notification(unverified_url).deliver
end
end
def fetch(uri_str, limit = 10)
response = Net::HTTP.get_response(URI.parse(uri_str))
case response
when Net::HTTPSuccess
response
when Net::HTTPRedirection
fetch(response['location'], limit - 1) unless limit == 0
else
response.error!
end
end
이미이 작업을 수행하는 delayed_job 설정을 unverified_url에 제출 양식을 설정합니다. 이 설정의 문제점은 일단 URL 검사가 완료되면 사이트를 업데이트하는 메커니즘을 원한다는 것입니다. 사용자가 문제가 있음을 알리기 위해 무언가를 "실행"한다고 말하면됩니다. 이미이 프로젝트를 알고 있습니까? – Ryan
@ Ryan 답변을 업데이트했습니다. 바라건대 코드가 명확 해지기를 바랍니다. – Unixmonkey
@Unixmonkey : 팁 : 제한 매개 변수를 fetch 메소드로 전달하고 있지만 아직 사용하지는 않았습니다. –