Назад | Перейти на главную страницу

Влияет ли перезапуск экземпляра ублюдочного веб-сервера, связанного с приложением Ruby Rails, на перекомпиляцию кода Ruby?

Я знаю, что если я внесу изменения в приложение Rails \ Ruby, потребуется перезапуск mongrel, чтобы изменения вступили в силу. Мне было просто любопытно, действительно ли mongrel использует скомпилированную версию приложения, а не интерпретирует ее на лету, как говорят, PHP обычно выполняется?

При беге в среде разработки, вам не нужно перезапускать Mongrel, чтобы изменения в исходном коде применялись немедленно (Rails проверяет, изменился ли исходный файл любого класса, унаследованного от одного из классов Rails, перед использованием этого класса).

При беге в производственной среде, необходимо перезапускать для каждого изменения.

Во всех случаях, если это не тот файл, о котором знает Rails (например, ваш собственный модуль или класс), или файл конфигурации, вы должны перезапустить Mongrel, чтобы изменения вступили в силу.

Обратите внимание, что это особенность Rails, а не Ruby

Чтобы ответить на часть вопроса - нет, Ruby не компилируется в какой-либо промежуточный файловый байт-код (в отличие, скажем, от файлов классов Java). Но, как сказал Крис, при запуске Rails в производственном режиме вам нужно перезапустить процесс, чтобы перезагрузить исходный код.

Одним из преимуществ использования Passenger против Mongrel является то, что с помощью Passenger вы можете перезапустить приложение при следующем HTTP-запросе, выполнив touch tmp/restart.txt в приложении current/ каталог.

Я считаю, что он не компилируется, но определенные файлы (например, database.yml и routes.rb) читаются только при запуске. Если вы измените (например) представление, изменение вступит в силу немедленно.