假设我的Rails Web应用程序中有以下线程:
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
如您所见,'count'变量在所有线程中共享。
现在,我想要做的是在多个httpd请求中分享'count',并且允许myController中的my_action有权访问该变量。例如,也许产生ruby进程以服务httpd进程的任何东西都可以在其范围内保存变量count,然后为httpd进程生成的ruby进程可以访问该变量。
使用memcached,数据库和会话变量是不可能的。最终'count'实际上是一个资源对象......一个FTP连接。
这可能吗?也许使用像this这样的Apache / Passenger工作者?
示例代码将不胜感激。
答案 0 :(得分:1)
使用全局变量确实可以做到这一点。 Rails中的全局变量是以美元符号开头的变量,如$ count。