Reputation: 21895
Let's say I have the following threading in my Rails web application:
class MyController
def my_action
count = 0
arr = []
10.times do |i|
arr[i] = Thread.new {
sleep(rand(0)/10.0)
Thread.current["mycount"] = count
count += 1
}
end
arr.each {|t| t.join; print t["mycount"], ", " }
puts "count = #{count}"
end
end
As you can see, the 'count' variable is shared across all threads.
Now, what I want to do is share 'count' across multiple httpd requests and allow my_action in MyController to have access to that variable. For instance, maybe whatever spawns the ruby process to serve httpd process could hold the variable count in its scope, and then the ruby processes spawned for httpd processes could then access that variable.
Using memcached, a database, and session variables is out of the question. Ultimately 'count' will actually be a resource object...an FTP connection.
Is this possible? Perhaps using Apache/Passenger workers like this?
Example code would be appreciated.
Upvotes: 0
Views: 2418
Reputation: 21895
Exactly this is possible using global variables. Global variables in Rails are those that start with a dollar sign, like $count.
Upvotes: 1