Menu selections too fast for Heroku?

Hello,

I have a weird problem that seems way over my skill level so could use
even some simple suggestions to point me in the right direction.
I have a set of 6 chained dropdown menus that work fine on my computer,
but do not retain the correct selections if I make the menu selections
too quickly on the Heroku server.

Each time a selection is made from a dropdown, the session data is
updated with the following jQuery/ Ajax:

# If BOOK dropdown clicked on.
chapters = $('#chapters').html()
$('#books').change ->
  book = $('#books :selected').text()
  book_id = $('#books :selected').val()
  escaped_book = book.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,

‘\$1’)
options =
$(chapters).filter(“optgroup[label=’#{escaped_book}’]”).html()
options = options.replace(‘selected=“selected”’, “”)
options = (‘Select a Chapter’ + options)
$.ajax(
url: ‘/dropdowns/update_image_book’,
data: “image_book_id=” + book_id)
if options
$(’#chapters’).html(options)
$(’#chapters’).prop(‘disabled’, false)
$(’#sections’).html(‘Select a
Section’)
$(’#sections’).prop(‘disabled’, true)
$(’#subsections’).html(‘Select a
Subsection’)
$(’#subsections’).prop(‘disabled’, true)
$(’#minisections’).html(‘Select a
Topic’)
$(’#minisections’).prop(‘disabled’, true)
else
$(’#chapters’).empty()
Here is controller:

def update_image_book
session[:image_book_id] = params[:image_book_id]
session[:image_chapter_id] = “”
session[:image_section_id] = “”
session[:image_subsection_id] = “”
session[:image_minisection_id] = “”
redirect_to pictures_path
end

And the view:
<%= select_tag :books,
option_groups_from_collection_for_select(Subject.order(:title), :books,
:title, :id, :title, get_id_from_session(:book)), :prompt => “Select a
Book”, :disabled => true %>

After looking at the heroku logs, it looks like if I make the selections
too quickly, the most recent selection runs before the line
2013-12-16T15:54:23.707522+00:00 heroku[router]: at=info method=GET
path=/dropdowns/update_image_book?image_book_id=3
host=…herokuapp.com fwd=“75.118.31.205” dyno=web.1
connect=13ms service=32ms status=302 bytes=113
has a chance to run.

Is this possible, and if so is there a better way to do this?

Dave.

http://api.jquery.com/jQuery.queue/

On Monday, December 16, 2013 6:38:12 PM UTC, Ruby-Forum.com User wrote:

Thanks Jason,

Is this common?

Race conditions on the rails session do happen, and can’t really be
fixed
with the default rails session store. With this the entirety of the
session
is in the cookie, and your requests can look look like this

request 1 sent (initial session)
request 2 sent (initial session)
response 1 received (sets session to intial + value set by processing of
request 1)
response 2 received (sets session to intial + value set by processing of
request 2)

so the values set by response 1 are completely obliterated. In
development
multiple requests are not processed in parallel so this can’t happen.
I think post people don’t stick stuff in the session that is too
important.

I once wrote a session store (base on the active record store)
( GitHub - fcheung/smart_session_store: a session store that helps to mitigate race conditions ) that mitigates this.
It
does mean that sessions are stored in the database rather than in the
cookie

Fred

Thanks Jason,

Is this common?

Dave

Frederick C. wrote in post #1130846:

I once wrote a session store (base on the active record store)
( GitHub - fcheung/smart_session_store: a session store that helps to mitigate race conditions ) that mitigates this.
It
does mean that sessions are stored in the database rather than in the
cookie

Fred

Fred,

Thanks for the reply and the reference to smart_session_store.

Dave