Hi All,
For my problem of updating status in the view, i tried the following :
Controller :
def status
#@session[''status''] = rand(0).to_s
@status = @session[''status'']
render :partial => "status", :locals => { :status =>
@status }
end
def startstatus
@t = Thread.new {
10.times do |i|
@session[''status''] = rand(0).to_s
sleep 2;
end
}
end
My startstatus.rhtml looks like this
<%= javascript_include_tag "prototype" %>
<div id="update1">
<%= render_component :action => "status" %>
<%= periodically_call_remote(:url => { :action => :status },
:frequency => 4,
:update => ''update1'' )
%>
</div>
_status.rhtml (render via partial)
<div class="label">
<%= @status %>...</div>
<br/>
However the value of the @session[''status''] does not chnage in
the view,
looks like the thread has been killed or something? I only get the firts
value and then on the value does not chnage every 4 secs.
Let me know what should I have to change for getting the value of the
session from the thread.
Regards
Gnan
Hi Gnan, I am facing the same problem in one application I am trying to develop, where I must use threads to run external processes, and I want to use periodically_call_remote to display some status info to the user. This is similar to what you''re trying to do, so I have tested your code, adding some debug text. And this is what I got: dbg:(startstatus) thread has updated status value to 0.424670516280457 dbg:(status) status is 0.424670516280457 dbg:(startstatus) thread has updated status value to 0.791096143890172 dbg:(startstatus) thread has updated status value to 0.608514182502404 dbg:(status) status is 0.424670516280457 dbg:(startstatus) thread has updated status value to 0.47138453903608 dbg:(startstatus) thread has updated status value to 0.421978918369859 dbg:(status) status is 0.424670516280457 dbg:(startstatus) thread has updated status value to 0.851542412070557 dbg:(startstatus) thread has updated status value to 0.970735334325582 dbg:(status) status is 0.424670516280457 dbg:(startstatus) thread has updated status value to 0.438931414391845 dbg:(startstatus) thread has updated status value to 0.976107021328062 dbg:(status) status is 0.424670516280457 dbg:(startstatus) thread has updated status value to 0.291818090947345 dbg:(status) status is 0.424670516280457 dbg:(status) status is 0.424670516280457 dbg:(status) status is 0.424670516280457 dbg:(status) status is 0.424670516280457 dbg:(status) status is 0.424670516280457 dbg:(status) status is 0.424670516280457 dbg:(status) status is 0.424670516280457 dbg:(status) status is 0.424670516280457 So the thread is updating the session variable, but these updates go lost somewhere... Is this a Rails problem? Does someone want to take the time to look into this? Cheers Giulio On 9/10/05, Gnanavel <gnanavel.s-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi All, > > For my problem of updating status in the view, i tried the following : > > Controller : > def status > #@session[''status''] = rand(0).to_s > @status = @session[''status''] > render :partial => "status", :locals => { :status => @status } > end > > def startstatus > @t = Thread.new { > 10.times do |i| > @session[''status''] = rand(0).to_s > sleep 2; > end > } > end > > My startstatus.rhtml looks like this > > <%= javascript_include_tag "prototype" %> > <div id="update1"> > <%= render_component :action => "status" %> > <%= periodically_call_remote(:url => { :action => :status }, > :frequency => 4, > :update => ''update1'' ) %> > </div> > > _status.rhtml (render via partial) > <div class="label"> > <%= @status %>...</div> > <br/> > > > However the value of the @session[''status''] does not chnage in the view, > looks like the thread has been killed or something? I only get the firts > value and then on the value does not chnage every 4 secs. > > Let me know what should I have to change for getting the value of the > session from t§he thread. > > Regards > Gnan > _______________________________________________ > Rails mailing list > Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
Hi again,
I doubth that someone has ever found this interesting ... anyway, I
think that the problem is that the session variable is stored only
once, when the controller terminate its execution.
In your case the session variable is modified in a thread, after that
the controller has terminated, and thus the session is never stored.
To overcome this you can call
@session.update within the thread code, to store the content of the
variable and make it available to other methods/controllers.
something like this should work:
def startstatus
@t = Thread.new {
10.times do |i|
@session[''status''] = rand(0).to_s
@session.update
sleep 2;
end
}
end
Cheers
/Giulio
On 10/21/05, Giulio Mola <lamola-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> Hi Gnan,
>
> I am facing the same problem in one application I am trying to
> develop, where I must use threads to run external processes, and I
> want to use periodically_call_remote to display some status info to
> the user.
>
> This is similar to what you''re trying to do, so I have tested your
> code, adding some debug text.
> And this is what I got:
>
> dbg:(startstatus) thread has updated status value to 0.424670516280457
> dbg:(status) status is 0.424670516280457
> dbg:(startstatus) thread has updated status value to 0.791096143890172
> dbg:(startstatus) thread has updated status value to 0.608514182502404
> dbg:(status) status is 0.424670516280457
> dbg:(startstatus) thread has updated status value to 0.47138453903608
> dbg:(startstatus) thread has updated status value to 0.421978918369859
> dbg:(status) status is 0.424670516280457
> dbg:(startstatus) thread has updated status value to 0.851542412070557
> dbg:(startstatus) thread has updated status value to 0.970735334325582
> dbg:(status) status is 0.424670516280457
> dbg:(startstatus) thread has updated status value to 0.438931414391845
> dbg:(startstatus) thread has updated status value to 0.976107021328062
> dbg:(status) status is 0.424670516280457
> dbg:(startstatus) thread has updated status value to 0.291818090947345
> dbg:(status) status is 0.424670516280457
> dbg:(status) status is 0.424670516280457
> dbg:(status) status is 0.424670516280457
> dbg:(status) status is 0.424670516280457
> dbg:(status) status is 0.424670516280457
> dbg:(status) status is 0.424670516280457
> dbg:(status) status is 0.424670516280457
> dbg:(status) status is 0.424670516280457
>
> So the thread is updating the session variable, but these updates go
> lost somewhere...
> Is this a Rails problem?
> Does someone want to take the time to look into this?
>
> Cheers
> Giulio
>
>
> On 9/10/05, Gnanavel
<gnanavel.s-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> > Hi All,
> >
> > For my problem of updating status in the view, i tried the following :
> >
> > Controller :
> > def status
> > #@session[''status''] = rand(0).to_s
> > @status = @session[''status'']
> > render :partial => "status", :locals => {
:status => @status }
> > end
> >
> > def startstatus
> > @t = Thread.new {
> > 10.times do |i|
> > @session[''status''] =
rand(0).to_s
> > sleep 2;
> > end
> > }
> > end
> >
> > My startstatus.rhtml looks like this
> >
> > <%= javascript_include_tag "prototype" %>
> > <div id="update1">
> > <%= render_component :action => "status" %>
> > <%= periodically_call_remote(:url => { :action => :status
},
> > :frequency => 4,
> > :update =>
''update1'' ) %>
> > </div>
> >
> > _status.rhtml (render via partial)
> > <div class="label">
> > <%= @status %>...</div>
> > <br/>
> >
> >
> > However the value of the @session[''status''] does not
chnage in the view,
> > looks like the thread has been killed or something? I only get the
firts
> > value and then on the value does not chnage every 4 secs.
> >
> > Let me know what should I have to change for getting the value of the
> > session from t§he thread.
> >
> > Regards
> > Gnan
> > _______________________________________________
> > Rails mailing list
> > Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org
> > http://lists.rubyonrails.org/mailman/listinfo/rails
> >
>