Phusion Passenger 6.1.4 не работает с версиями Ruby ранее 2.5
Работал, работал исправно Phusion Passenger, и вдруг поломался после обновления gem passenger до версии 6.1.4 - перестал работать с Ruby 2.4.10. Я написал разработчикам, начали вместе разбираться... оказывается, они "провели для себя грань" минимально допустимых версий Ruby, начиная с 2.5. В процессе общения выяснилось, что они "не собираются поддерживать всякое старьё" - и плевать им на тех, у кого ещё старые сайты на Ruby on Rails. Начал я разбираться самостоятельно. В общем, всё дело оказалось в "новомодном синтаксисе" блоков с обработкой исключений:
something.each do | a |
...
rescue => e
...
end
в более ранних версиях блок должен быть оформлен несколько иначе:
something.each do | a |
begin
...
rescue => e
...
end
end
Посмотрел в исходный код Phusion Passenger, нашёл в src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb всего 2 таких блока - строки 120 и 176. Требуются совсем незначительные изменения:
# строка 120
env[RACK_RESPONSE_FINISHED].reverse_each do | cb |
## my patch
begin
cb.call(env, status, headers, e)
rescue => e
print_exception("Rack application object", e)
end
end
# строка 176
env[RACK_RESPONSE_FINISHED].reverse_each do | cb |
## my patch
begin
cb.call(env, status, headers, nil)
rescue => e
print_exception("Rack application object", e)
end
end
Я сообщил разработчикам Phusion Passenger, но снобизм разработчика @CamJN (ник на GitHub) просто зашкаливает - не стал вносить изменения в свой код (вплоть до версии PP 6.1.7 - изменений так и нет). Но нет ничего сложного самостоятельно исправить в исходниках, даже после каждого обноления gem ckeditor. Зато сайты работают!