I'm trying to understand something basic about Rails (and Apache).

This is a follow-up to Matt Jones' answer in 
https://groups.google.com/forum/#!topic/rubyonrails-talk/y6ktv7rL6IA

I repeat his answer here

> I suspect `User.exists?` is going to be the lightest possible option. 
> `User.count == 0` will also work, but I know there are some DBs where that 
> operation can be expensive on large tables.
>
> This is still going to do a query every time it checks, so if that's too 
> much load you could cache the result:
>
> class User < ActiveRecord::Base
>   def self.any_users?
>     @any_users ||= exists?
>   end
> end
>
> Then your role-defaulting code can check `self.class.any_users?`, which 
> will only run one query (per server) that returns true.
>
> NOTE NOTE NOTE: the above is not 100% thread-safe. It assumes that there 
> is exactly one user sending requests trying to be the first. If you're 
> worried about somebody racing to sign up for that first account, you'll 
> want to come up with a more secure approach.
>
> --Matt Jones
>


In
class User < ActiveRecord::Base
 def self.any_users?
   @any_users ||= exists?
 end
end

So at some point in the code, I call
User.any_users;
So Ruby says "Ok, @any_users isn't defined so I'm going to call exists?"  
That makes perfect sense.

Let's say I have several people banging on my website.  Do each of them get 
a completely different copy of Rails?  How many copies of @any_users are 
there?  Does @any_users get initialized for each user?  What data is common 
for all 
threads? What's different for all threads?

Where can I learn more about this?  I've skimmed 
https://bearmetal.eu/theden/how-do-i-know-whether-my-rails-app-is-thread-safe-or-not/
 
but it really isn't helping me understand what is and isn't common between 
each thread/user/session.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/abe7fdf1-b381-4e3c-aa7b-04733cadd9c8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to