если Вы просто вытаскиваете единственное значение из любого (не в цикле) тогда, оба делают проверку границ (Вы находитесь в управляемом коде, помнят), это - просто список, делает это дважды. См. примечания позже для того, почему это вероятно не грандиозное предприятие.
, Если Вы используете свое собственное для (международный интервал i = 0; я < x. [Длина/Количество]; я ++), тогда основное отличие следующие:
при использовании foreach тогда, основное отличие следующие:
проверка границ часто не является никаким грандиозным предприятием (особенно, если Вы находитесь на CPU с глубоким конвейером и предсказанием ветвлений - норма для больше всего в эти дни), но только Ваше собственное профилирование может сказать Вам, если это - проблема. Если Вы находитесь в частях Вашего кода, где Вы избегаете выделений "кучи" (хорошими примерами являются библиотеки или в реализациях хэш-кода), тогда обеспечение переменной вводится как Список не, IList избежит той ловушки. Как всегда профиль, если это имеет значение.
В пассажирской версии 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)
Мне пришлось сделать следующее, чтобы заставить его работать
gems / пассажира-2.2.5 / библиотека / phusion_passenger / utils.rb добавить в этот файл require 'stringio' в строке 34
открыть lib / ruby / 1.9.1 / tempfile.rb закомментировать строку 140
И это работает как шарм.
Привет, Дэмиен. У меня была та же проблема, и пока я не получил для вас точного ответа / ссылки по памяти, мне пришлось пропатчить стойку, а не временный файл. Надеюсь, это поможет
Обычное исправление Джима сработало для меня, спасибо, эта проблема сводила меня с ума.
Мне также пришлось исправить 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 работать.
При применении этого исправления я не могу перезапустить модуль Passenger более чем несколько раз с помощью метода tmp / restart.txt. После этого запросы принимаются, но не обслуживаются. Я подозреваю, что патч может пропускать временные файлы