Способ поделиться переменной через несколько потоков httpd с Rails? - PullRequest
0 голосов
/ 09 марта 2011

Допустим, в моем веб-приложении Rails есть следующие потоки:

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' является общей для всех потоков.

Теперь, я хочу сделать поделиться 'count' для нескольких запросов httpd и разрешить my_action в MyController иметь доступ к этой переменной . Например, возможно, все, что порождает процесс ruby ​​для обслуживания процесса httpd, может содержать переменную count в своей области, и тогда процессы ruby, порожденные процессами httpd, могут затем обращаться к этой переменной.

Использование memcached, базы данных и переменных сеанса исключено. В конечном счете 'count' будет фактически объектом ресурса ... FTP-соединение.

Возможно ли это? Возможно, с использованием Apache / Passenger, таких как this ?

Пример кода приветствуется.

1 Ответ

1 голос
/ 18 марта 2011

Именно это возможно при использовании глобальных переменных. Глобальные переменные в Rails - это те, которые начинаются со знака доллара, например, $ count.

...