Почему Rails не может работать с mod_ruby?
Извините, если это звучит как глупый вопрос, потому что это, кажется, одна из тех вещей, которые не имеют смысла, но кто-то может объяснить мне, почему Rails нужен свой собственный сервер (Mongrel, WEBrick, mod_rails и т. Д.) И может ' т просто использовать mod_ruby?
3 ответа
Все экземпляры apache, работающие с mod_ruby, имеют общий интерпретатор Ruby. Это означает, что его нельзя использовать вообще на общих хостах или в любой среде, где на одном компьютере запущено несколько приложений Rails. Может быть возможно запустить несколько копий одного и того же приложения на одном компьютере, но вы также можете легко обнаружить ошибки. Поскольку рельсы являются однопоточными, запуск только одного процесса ruby для каждой машины является немыслимым.
Кроме того, это не так хорошо работает.
Для более глубокого обсуждения, проверьте блог этого сотрудника Phusion
Уже отвечено, что mod_ruby приводит к общему интерпретатору Ruby, но причина, по которой это особенно проблематично, заключается в том, что классы попирают друг друга. Например, рассмотрим ActiveRecord::Base, который определяет соединение с определенной базой данных. Состояние этого класса отличается в разных приложениях Rails, поэтому, как только несколько приложений Rails должны были запускаться на одном и том же интерпретаторе, у вас возникает серьезная классовая борьба.
В другом ответе говорилось, что Rails является однопоточным, но это не обязательно верно для Rails 2.2.2. Я бы оставил это как комментарий к этому ответу, но я в кармической рубашке:)
"mod_ruby использует по одному интерпретатору для каждого процесса Apache, что означает, что приложения обходят друг друга в пространствах имен. По крайней мере, для Rails это неприемлемо, так что это 1 приложение на установку Apache, если вы хотите mod_ruby". - Дэвид Хайнмайер Ханссон
Теперь, когда он был немного высмеян, если вы все еще хотите его использовать, посмотрите FAQ по mod_ruby
Dreamhost действительно попытался включить ruby в свою хостинговую среду, это было сделано в их блоге, на основании их выводов из этой работы.