重新启动链接到Ruby Rails应用程序的混合Web服务器实例是否会重新编译Ruby代码?

我知道如果对Rails \ Ruby应用程序进行更改,则需要重新启动mongrel以查看更改才能生效。 我只是好奇,如果杂种实际上使用应用程序的编译版本,而不是像在PHP通常完成飞行解释它?

在开发环境中运行 ,无需重新启动Mongrel即可立即应用源代码(Rails将在使用该类之前检查其中一个Rails类的任何类的源文件是否已更改)。

在生产环境中运行 ,必须重新启动每个更改。

在所有情况下,如果文件不是Rails知道的文件(例如您自己的模块或类)或是configuration文件,则必须重新启动Mongrel以使更改生效。

请注意,这是Rails的一个特性,而不是Ruby

要回答这个问题的一部分 – 不,Ruby不会编译成任何types的基于中间文件的字节码(不像Java的类文件)。 但是,正如Chris所说的,在生产模式下运行Rails时,您必须重新启动进程来重新加载源代码。

使用Passenger与Mongrel的一个优点是,通过在应用程序的current/目录中touch tmp/restart.txt ,使用Passenger,可以使应用程序在下一个HTTP请求上重新启动。

我相信它没有编译,但是某些文件(如database.yml和routes.rb)只在启动时被读取。 如果您更改(例如)视图,则更改应立即生效。