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

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

我知道如果我对 Rails\Ruby 应用程序进行更改,则需要重新启动 mongrel 才能使更改生效。我只是好奇 Mongrel 是否真的使用了应用程序的编译版本,而不是像 PHP 通常那样即时解释它?

答案1

跑步时在开发环境中,您不需要重新启动 Mongrel 就可以立即应用源中的更改(Rails 会在使用该类之前检查从某个 Rails 类派生的任何类的源文件是否已更改)。

跑步时在生产环境中,每次更改都必须重新启动。

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

请注意,这是 Rails 的功能,而不是 Ruby 的功能

答案2

部分回答这个问题 - 不,Ruby 不会被编译成任何类型的基于中间文件的字节码(与 Java 的类文件不同)。但正如 Chris 所说,在生产模式下运行 Rails 时,您必须重新启动该过程才能重新加载源代码。

touch tmp/restart.txt与 Mongrel 相比,使用 Passenger 的一个优点是,通过 Passenger,您可以在应用程序的目录中执行操作,从而在下一个 HTTP 请求时重新启动应用程序current/

答案3

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

相关内容