【发布时间】:2011-02-15 04:29:16
【问题描述】:
当我使用嵌入式码头服务器(用于 grails 1.2 的 tomcat)运行我的 grails 应用程序时,我可以在运行时即时更改我的控制器、服务和其他 java 文件,而无需重新启动应用程序。为此,我如何在部署在 Tomcat(或任何服务器)上的应用程序上实现相同的功能。我观察到 webapps 下的爆炸 war 文件夹有 gsp 文件,但没有 groovy 文件。
【问题讨论】:
当我使用嵌入式码头服务器(用于 grails 1.2 的 tomcat)运行我的 grails 应用程序时,我可以在运行时即时更改我的控制器、服务和其他 java 文件,而无需重新启动应用程序。为此,我如何在部署在 Tomcat(或任何服务器)上的应用程序上实现相同的功能。我观察到 webapps 下的爆炸 war 文件夹有 gsp 文件,但没有 groovy 文件。
【问题讨论】:
完成 Eric 的回答后,您无法在生产环境中动态更改源代码。但是,如果您真的想实时修改您的代码,您可以:
grails.gsp.enable.reload=true。这将允许您即时更改您的 gsp 文件。小心,因为它会损害性能。详情请见here
【讨论】:
当您将应用程序打包为 WAR 时,Groovy 文件将编译为 Java 字节码(.class 文件)并包含在 WAR 中。由于内存泄漏,文件在运行时的热交换不适合生产使用。
【讨论】:
permgen 问题是 Spring/Grails 特有的,还是在精简的 Tomcat/Groovlet 设置中同样适用?
在性能方面,已编译的 Groovy 文件与未编译的相比收益为零,对吗?编译步骤只是为了让 Java 和 Groovy 一起工作吗?
我希望在不久的将来,我们将拥有一个完全可重新加载的生产环境,该环境运行良好,并且没有内存泄漏。
Grails 和 Rails 都没有提供可行的生产重载选项(在 Grails 中要求迟早死掉),这似乎很愚蠢。 PHP 显然很慢,但数以百万计的 Apache/PHP 驱动的网站可以迅速向用户提供内容。如果我们不运营 Facebook,我们是否应该关心在 *Rails 训练营中被警告过的性能损失?
从外部看,持续的 Java permgen 问题似乎很荒谬,它无法解决吗?
【讨论】: