我的网站上有一个测验模块供用户参加测验。我在控制器中设置了这样的缓存:
def set_cache_buster
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
很少有用户获得随机 404错误。用户在 Windows 8.1 上使用 Chrome 。每天大约有300-400名用户参加测验,其中很少有人会得到404错误。现在很难跟踪404问题,因为我们只收到生产中500个错误的通知,我们在本地或测试环境中没有遇到过这个问题。我担心的是,如果这是一个代码问题,那么所有用户都应该得到它,因为有超过30,000个用户。知道为什么这只发生在少数用户身上吗?
添加更多信息
它与任何链接无关,它只是随机发生的。就像我们有3次尝试让用户清除测验。很少有人得到错误我们要求他们利用剩下的尝试并尝试测验,他们能够。大部分时间它只能正常工作。其他用户已经完成了测验,很少有人报告相同测验的404。
例如:在考试模块中,问题逐个加载。
首先,用户首先访问:exam_instructions/some_quiz
。然后用户重定向到测验页面,我有一个表格,如下所示:
<%= form_tag({:action=> "calc_score",:id => @quiz.slug, :name => 'question'},:method => :post,:id=>'form',:name=>'question') do %>
<%= submit_tag "Submit" %>
<% end %>
用户提交并使用测验ID 将表单数据转到 calc_score 。分数计算得出:
before_filter :find_quiz
def calc_score
#Calculates the score for the current question
# redirects to the show page with the quiz id where the next question is presented to the user on the show page
redirect_to :action=> "show", :id=> @quiz.slug
end
def show
#next question is loaded
end
protected
def find_quiz
@quiz = Quiz.find_by_slug(params[:id]) or raise(ActiveRecord::RecordNotFound) if params[:id]
end
现在,当用户在提交测验后突然接受测验时,他们会看到404错误。现在,如果 @quiz 对象 nil ,则显示页面本身不会已加载但它已存在。只有在提交内容出现问题时,少数用户将:ID更改为未定义或 nil ,并且用户看到的是404错误页面,其中100位用户已经完成了相同的测验。
答案 0 :(得分:0)
最后整理出来的问题是能够在@EugeneM建议的404通知的帮助下跟踪它。有一个名称不正确的变量,只在某些情况下被触发。通知可以更轻松地跟踪错误。谢谢@EugeneM。