7

似乎 Grails 会自动重新编译我的 GSP 页面,但不会自动重新编译我的控制器。它曾经与以前版本的 Grails 一起工作。知道我可以寻找什么吗?

在 OSX Snow Leopard 上使用 Grails 2.1.0。

注意:这与此问题类似

4

4 回答 4

7

免责声明:自动重新加载在我的 Mac 上一直对我有用。

我发现了一些可能有用的东西。

首先,运行自定义环境(不是开发环境)似乎会禁用自动重新加载(请参阅此 stackoverflow 帖子),因此如果您以这种方式运行应用程序,则需要按照该帖子中的说明进行操作。

其次,如果您将应用程序作为战争运行,请确保自动重新加载已关闭。(请参阅 Grails 自动重新加载页面

第三,我发现使用 Grails IDE(例如 IntelliJ 或 SpringSource)确实为 Grails 开发环境增加了很多稳定性。例如,IntelliJ 不使用二进制下载附带的 Grails shell 文件。它手动调用 Grails jar 和引导程序。

我对你的问题是:

您的其他环境是什么样的?您如何运行您的应用程序(run-app 或其他容器)?

你安装了哪些 Grails 插件(Grails 文档说 tomcat 插件配置为优化自动重新加载)?

您的计算机上是否下载了任何其他 Grails 二进制文件(在尝试加载时可能会导致混淆)?

最后,您是否能够在干净的环境中重现此问题(即新的 Grails 二进制文件、新的 Grails 创建应用程序)?

我还建议阅读 Grails 文档的部署部分(在此处找到)。它有一些关于重新加载的相关信息。

对于冗长且可能没有回答的答案,我深表歉意,但我希望这引发了一两个想法。让我知道事情的结果!

于 2012-10-03T18:23:20.790 回答
4

如果您在控制器上错误地命名包名称(如文件夹结构与包声明不一致),应用程序仍将运行并且不会报告错误,但自动重新加载将不起作用。

于 2012-10-24T15:54:28.137 回答
0

当我有一个从中派生其他控制器的 BaseController 类时,我遇到了这个问题。如果我对 BaseController 类进行更改,例如添加方法或闭包、更改方法名称、导入一些类等,Grails 中的整个类重新加载功能将停止运行。

对我有用的唯一解决方案是删除编译所有类的目标目录。至少这样我就不必每次都重新启动服务器,这让我不必等待大约 30 秒来显示起始页面。当类重新加载功能无法按预期工作时,这可能会很烦人。

Grails 自动重新加载功能并非没有怪癖。其中一些怪癖最终与 java 以及类加载在 servlet 容器环境中的工作方式有关。我希望 Grails 团队将优先考虑为 Grails 提供无缝的类重载,就像其他脚本环境(ruby、PHP、python 或 play 框架)一样,因为处理这个框架的其他一些方面非常有趣。

于 2014-01-25T08:10:44.900 回答
-1

奇怪,我从来没有遇到过这个问题。你确定你的控制器编译正确,没有错别字吗?我发现通常只需要一两秒钟就能看到控制器中反映的变化。域对象更改需要重新启动(它们通常会擦除您保存的数据),我发现有时对 Spring 托管资源(如注入服务)的更改不会“采取”。但是控制器和 GSP 页面在 97% 的时间内重新编译 :)

我在 GGTS (eclipse) 和命令行运行应用程序之间切换,它几乎总是对我有用。您是否正在做任何类型的缓存?我在 Lion 上运行 JDK 1.6,grails 2.1.1

通常你会看到输出告诉你文件已经在点击保存后的一两秒内重新编译。

于 2012-10-09T13:50:49.357 回答