Hallo,
bei meine Versuchen mit Ruby On Rails stolpere ich immer wieder. Ich
dachte eigentlich, daß ein Webserver mehrere Anfragen parallel
abarbeiten kann. Ich verwende "thin" als Entwicklungsserver.
Nun wollte ich mal ein bißchen mit den Transaktionen herumprobieren.
Dazu habe ich zwei Funktionen erstellt, die den gleichen/zwei
verschiedene User Datensatz(e) editieren, wobei die erste Funktion 10s
schläft.
Aber solange die ersten Funktion (change) schläft, passiert überhaupt
nichts. Selbst statische Seiten werden erst ausgegeben, wenn "change"
den 10 Sekündigen Schlaft hinter sich hat.
Ist das so gewollt? Nun dachte ich, daß thin/WEBrick in der Lage sind 2
unterschiedliche Anfragen gleichzeitig Auszuführen, andernfalls machen
Transaktionen wenig Sinn. Und was nützt einem ein Multiprozessersystem
als Server?
Es mag ja bei Standardanfragen egal sein, aber wenn man umfangreiche
Bilder dynamisch auf dem Server erzeugt oder sehr komplexe Suchabfragen
startet, sollte so etwas nicht passieren.
1 | def change
|
2 | #User.transaction do
|
3 | @user = User.where('id = ?', params[:id]).first
|
4 |
|
5 | sleep 10
|
6 |
|
7 | @user.name = @user.name + "v"
|
8 | @user.save
|
9 |
|
10 | render :text => @user.name
|
11 | #redirect_to :action => "show", :id => params[:id]
|
12 | #end
|
13 | end
|
14 |
|
15 | def change2
|
16 | #User.transaction do
|
17 | @user = User.where('id = ?', params[:id]).first
|
18 |
|
19 |
|
20 |
|
21 | @user.name = @user.name + "x"
|
22 | @user.save
|
23 |
|
24 | render :text => @user.name
|
25 |
|
26 | #redirect_to :action => "show", :id => params[:id]
|
27 | #end
|
28 | end
|