As http://www.ruby-forum.com/topic/65495 has shown,I have drawn into
trouble about my thread debugging for some days,and need help to solve
it urgently!
This thread problem comes from the design requirements that my web
application will get the rss feeds read which are generated by the web
application itself.
http://www.ruby-forum.com/topic/63984 has shown my code,and the key code
is the following:
@feed
FeedTools::Feed.open("http://localhost:3000/feeds/userrss/#{params[:id]}")
userrss is the controller to generate rss feeds:
class FeedsController < ApplicationController
def userrss
@user = User.find_by_id(params[:id])
@articles = @user.articles(:all,:order => ''updated_at
desc'')
@feed = FeedTools::Feed.new
@feed.title = "#{@user.login}"
@feed.author = "#{@user.login}"
@feed.link = "http://localhost:3000"
@articles.each do|@article|
@feed_item = FeedTools::FeedItem.new
@feed_item.link
"http://localhost:3000/articles/view/#{@article.id}"
@feed_item.content = "#{@article.body}"
@feed.entries << @feed_item
end
end
end
The above code can not work because of the thread problem:a controller
will not return until it got the response from another controller.
When I use Webrick webserver,If I change the value of
@@allow_concurrency of Actionpack,it can work,but will not If I deploy
the web application using Apache+scgi. Currently my operating system is
windows,what should i do to conquer this thread question,i have no idea
but a silly scheme:
To use two web server on one computer with different http request
port,for example Apache of 80 and Webrick of 3000,and then deploy the
web application under both Apache and Webrick with:
@feed
FeedTools::Feed.open("http://localhost:3000/feeds/userrss/#{params[:id]}")
which the request of http://localhost:3000/feeds/userrss/#{params[:id]}
will cause the Webrick to process it.
Very confused and urgent,Thanks!!!
Charlie
--
Posted via http://www.ruby-forum.com/.
charlie wrote:> As http://www.ruby-forum.com/topic/65495 has shown,I have drawn into > trouble about my thread debugging for some days,and need help to solve > it urgently! > > This thread problem comes from the design requirements that my web > application will get the rss feeds read which are generated by the web > application itself. > http://www.ruby-forum.com/topic/63984 has shown my code,and the key code > is the following:I didn''t follow your original problem thread, so I''m not sure if this was suggested and ruled out. Why not cache the rss feed when you generate it, and read the cached file rather than trying to connect back into the app? That would avoid threading completely... -- Alex
I just use the example of generating feeds of articles to explain the thread problem more explicitly,in fact,the web application is more complicated,and in many cases the feeds will be first accessed by the web application itself,it has a compex logic--the design requires that... Alex Young wrote:> charlie wrote: >> As http://www.ruby-forum.com/topic/65495 has shown,I have drawn into >> trouble about my thread debugging for some days,and need help to solve >> it urgently! >> >> This thread problem comes from the design requirements that my web >> application will get the rss feeds read which are generated by the web >> application itself. >> http://www.ruby-forum.com/topic/63984 has shown my code,and the key code >> is the following: > I didn''t follow your original problem thread, so I''m not sure if this > was suggested and ruled out. Why not cache the rss feed when you > generate it, and read the cached file rather than trying to connect back > into the app? That would avoid threading completely...-- Posted via http://www.ruby-forum.com/.
Ezra Zygmuntowicz
2006-May-13 18:11 UTC
[Rails] Re: Asking for help again about my thread debug
On May 13, 2006, at 9:07 AM, charlie wrote:> I just use the example of generating feeds of articles to explain the > thread problem more explicitly,in fact,the web application is more > complicated,and in many cases the feeds will be first accessed by the > web application itself,it has a compex logic--the design requires > that... > > Alex Young wrote:Charlie- To make this happen you need to get two rails backends running. Since you''re on windows lighttpd/fcgi is not an option. But You can run lighttpd/mongrel on windowsw. You set up lighttpd to proxy requests to two mongrel servers running. This way you can do exactly what you are trying to do. But from looking at what you are trying to do i think you may be approaching it from the wrong angle. Why do you need to make a http requests to your own application? why not just make a way to get the same data from within your app without making an http request? Give me some more details and maybe I can help you come up with a better way of doing this then the extra http requests. After all rails is an integrated environment, and you should be able to find a way to do what you want without the extr http request. -Ezra
Daniel Higginbotham
2006-May-13 19:06 UTC
[Rails] Re: Asking for help again about my thread debug
I wonder if it would help to write some stand-alone ruby script to generate
the feeds, then have your userrss action run the script using command
expansion? And then when you read the feed you can have
@feed = FeedTools::Feed.open(RAILS_ROOT +
''/whatever/feed-generator.rb'')
Instead of
@feed =
FeedTools::Feed.open("http://localhost:3000/feeds/userrss/#{params[:id]}")
If you go this route, be sure to add "require
''config/environment''" to your
standalone script so you can access your models.
I agree that it seems like you shouldn''t have to make an extra HTTP
request.
I tried googling "command line rails" to see if there were any way to
interact with controllers from the command line, but I didn''t find
anything.
I''m sure there''s a way to do it though.
-----Original Message-----
From: rails-bounces@lists.rubyonrails.org
[mailto:rails-bounces@lists.rubyonrails.org] On Behalf Of Ezra Zygmuntowicz
Sent: Saturday, May 13, 2006 8:10 AM
To: rails@lists.rubyonrails.org
Subject: Re: [Rails] Re: Asking for help again about my thread debug
On May 13, 2006, at 9:07 AM, charlie wrote:
> I just use the example of generating feeds of articles to explain the
> thread problem more explicitly,in fact,the web application is more
> complicated,and in many cases the feeds will be first accessed by the
> web application itself,it has a compex logic--the design requires
> that...
>
> Alex Young wrote:
Charlie-
To make this happen you need to get two rails backends running.
Since you''re on windows lighttpd/fcgi is not an option. But You can
run lighttpd/mongrel on windowsw. You set up lighttpd to proxy
requests to two mongrel servers running. This way you can do exactly
what you are trying to do.
But from looking at what you are trying to do i think you may be
approaching it from the wrong angle. Why do you need to make a http
requests to your own application? why not just make a way to get the
same data from within your app without making an http request? Give
me some more details and maybe I can help you come up with a better
way of doing this then the extra http requests. After all rails is an
integrated environment, and you should be able to find a way to do
what you want without the extr http request.
-Ezra
_______________________________________________
Rails mailing list
Rails@lists.rubyonrails.org
http://lists.rubyonrails.org/mailman/listinfo/rails
Hi,Ezra Let me explain some details about my web application. In my web app,users can register and publish their information such as books to be sold,dvd,.... These information can be generated as rss feeds and read by any others. Another characteristic special is that the users registered can have friends that are also registered users.There is a panel to read their friends'' rss information together with other foreign rss feeds-- that is to say,inside the web application,there is an rss reader to read feeds both from inside and outside. The feeds from inside are for the friends'' published information, and I think this kind of style can give a good experience for users. Ezra Zygmuntowicz wrote:> But from looking at what you are trying to do i think you may be > approaching it from the wrong angle. Why do you need to make a http > requests to your own application? why not just make a way to get the > same data from within your app without making an http request? Give > me some more details and maybe I can help you come up with a better > way of doing this then the extra http requests. After all rails is an > integrated environment, and you should be able to find a way to do > what you want without the extr http request. > > -Ezra-- Posted via http://www.ruby-forum.com/.
Ezra Zygmuntowicz
2006-May-15 03:08 UTC
[Rails] Re: Re: Asking for help again about my thread debug
On May 13, 2006, at 9:30 PM, charlie wrote:> Hi,Ezra > Let me explain some details about my web application. > In my web app,users can register and publish their information such as > books to be sold,dvd,.... > These information can be generated as rss feeds and read by any > others. > Another characteristic special is that the users registered can have > friends that are also registered users.There is a panel to read their > friends'' rss information together with other foreign rss feeds-- > that is > to say,inside the web application,there is an rss reader to read feeds > both from inside and outside. The feeds from inside are for the > friends'' > published information, and I think this kind of style can give a good > experience for users. >Charlie- Maybe you should consider caching the users rss feeds to disk using caches_page. Then use an observer to expire and rebuild the cache when one of the rss feeds gets updated. This way you could just read the other users rss feeds from within your app just by reading it off disk with render :file => ''/other/users/feed.xml''. For external websites a you can still use http even with only one webrick or mongrel or whatever process running your rails app. And it wouldn''t block when you need to show users other rss feeds from within your app. Cheers- -Ezra