Ruby 1.9.1-p234, Пассажирские 2.2.5, направляющие 2.3-стабильный закрытый поток по запросу POST

если Вы просто вытаскиваете единственное значение из любого (не в цикле) тогда, оба делают проверку границ (Вы находитесь в управляемом коде, помнят), это - просто список, делает это дважды. См. примечания позже для того, почему это вероятно не грандиозное предприятие.

, Если Вы используете свое собственное для (международный интервал i = 0; я < x. [Длина/Количество]; я ++), тогда основное отличие следующие:

  • Массив:
    • проверка границ удалена
  • Списки
    • , проверка границ выполняется

при использовании foreach тогда, основное отличие следующие:

  • Массив:
    • никакой объект не выделяется для управления повторением
    • , проверка границ удалена
  • Список через переменную, которая, как известно, была Списком.
    • итеративная переменная управления является стеком, выделенным
    • , проверка границ выполняется
  • Список через переменную, которая, как известно, была IList.
    • итеративная переменная управления является "кучей", выделенной
    • , проверка границ выполняется, также значения Списков не могут быть изменены во время foreach, тогда как массив может быть.

проверка границ часто не является никаким грандиозным предприятием (особенно, если Вы находитесь на CPU с глубоким конвейером и предсказанием ветвлений - норма для больше всего в эти дни), но только Ваше собственное профилирование может сказать Вам, если это - проблема. Если Вы находитесь в частях Вашего кода, где Вы избегаете выделений "кучи" (хорошими примерами являются библиотеки или в реализациях хэш-кода), тогда обеспечение переменной вводится как Список не, IList избежит той ловушки. Как всегда профиль, если это имеет значение.

8
задан Ryan Bigg 8 February 2010 в 05:42
поделиться

5 ответов

В пассажирской версии 2.2.8 есть обходной путь, поэтому он больше не нужен.

Случайный ответ Джима выше сработал для меня. Большое спасибо Джиму за вашу помощь.

Ниже приведены различия в моей системе. Я надеюсь, что это поможет.

Киллиан.

*** /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/lib/phusion_passenger/utils.rb.orig Tue Nov  3 17:43:30 2009
--- /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/lib/phusion_passenger/utils.rb  Tue Nov  3 17:43:46 2009
***************
*** 31,36 ****
--- 31,37 ----
  require 'etc'
  require 'fcntl'
  require 'tempfile'
+ require 'stringio'
  require 'phusion_passenger/exceptions'
  if !defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby"
    require 'phusion_passenger/native_support'


*** /usr/local/lib/ruby/1.9.1/tempfile.rb.orig  Tue Nov  3 17:44:34 2009
--- /usr/local/lib/ruby/1.9.1/tempfile.rb   Tue Nov  3 17:45:55 2009
***************
*** 137,143 ****
      # keep this order for thread safeness
      begin
        if File.exist?(@tmpname)
!         closed? or close
          File.unlink(@tmpname)
        end
        @@cleanlist.delete(@tmpname)
--- 137,143 ----
      # keep this order for thread safeness
      begin
        if File.exist?(@tmpname)
!         # closed? or close
          File.unlink(@tmpname)
        end
        @@cleanlist.delete(@tmpname)
5
ответ дан 5 December 2019 в 21:20
поделиться

Мне пришлось сделать следующее, чтобы заставить его работать

gems / пассажира-2.2.5 / библиотека / phusion_passenger / utils.rb добавить в этот файл require 'stringio' в строке 34

открыть lib / ruby ​​/ 1.9.1 / tempfile.rb закомментировать строку 140

И это работает как шарм.

2
ответ дан 5 December 2019 в 21:20
поделиться

Привет, Дэмиен. У меня была та же проблема, и пока я не получил для вас точного ответа / ссылки по памяти, мне пришлось пропатчить стойку, а не временный файл. Надеюсь, это поможет

0
ответ дан 5 December 2019 в 21:20
поделиться

Обычное исправление Джима сработало для меня, спасибо, эта проблема сводила меня с ума.

Мне также пришлось исправить actionview (за патч Гектора Гомеса на https: // rails. lighthouseapp.com/projects/8994/tickets/2188-i18n-fails-with-multibyte-strings-in-ruby-19-similar-to-2038), чтобы заставить rails и ruby ​​1.9.1 работать.

0
ответ дан 5 December 2019 в 21:20
поделиться

При применении этого исправления я не могу перезапустить модуль Passenger более чем несколько раз с помощью метода tmp / restart.txt. После этого запросы принимаются, но не обслуживаются. Я подозреваю, что патч может пропускать временные файлы

0
ответ дан 5 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: