似乎Grails会自动重新编译我的GSP页面,但不会重新编译我的控制器。它曾用于以前版本的Grails。知道我能找到什么吗?
在OSX Snow Leopard上使用Grails 2.1.0。
注意:这类似于this issue
答案 0 :(得分:7)
免责声明:在我的Mac上,自动重新加载一直对我有效。
我发现了一些可能有用的东西。
首先,运行自定义环境(不是开发人员)似乎会禁用自动重新加载(see this stackoverflow post),因此如果您正在运行该应用程序,则需要按照该帖子中的说明进行操作那样。
其次,如果您将应用程序作为战争运行,请确保自动重新加载已关闭。 (See the Grails Auto-Reload Page)
第三,我发现使用Grails IDE(例如IntelliJ或SpringSource)确实为Grails开发环境增加了很多稳定性。例如,IntelliJ不使用二进制下载附带的Grails shell文件。它手动调用Grails jar和bootstraps。
我的问题是:
您的其他环境是什么样的?你是如何运行你的应用程序(运行应用程序或其他容器)?
您安装了哪些Grails插件(Grails文档说明tomcat插件是否配置为最佳自动重新加载)?
您的计算机上是否下载了任何其他Grails二进制文件(在尝试加载时可能会造成混淆)?
最后,您是否能够在干净的环境中重现此问题(意味着新的Grails二进制文件,新的Grails create-app)?
我还建议阅读Grails文档的部署部分(found here)。它有一些关于重装的相关信息。
我为这个长篇大论且可能没有回答的答案道歉,但我希望这引发了一两个想法。让我知道事情的结果!
答案 1 :(得分:4)
如果您错误地命名控制器上的软件包名称(因为文件夹结构与软件包声明不一致),应用程序仍将运行并且不会报告错误,但自动重新加载将不起作用。
答案 2 :(得分:0)
当我有一个BaseController类,从中派生出其他控制器时,我遇到了这个问题。如果我对BaseController类进行更改,例如添加方法或闭包,更改方法名称,导入某些类等,Grails中的整个类重新加载功能将停止。
对我有用的唯一解决方案是删除编译所有类的目标目录。至少这样我每次都不必重新启动服务器,这使我不必等待大约30秒才能显示起始页面。当类重新加载功能无法按预期工作时,这可能会非常烦人。
Grails自动重新加载功能并非没有怪癖。其中一些怪癖最终与java有关,以及类加载如何在servlet容器环境中运行。我希望Grails团队能够优先为Grails提供无缝的类重新加载,就像其他脚本环境(ruby,PHP,python或play框架)一样,因为这个框架的其他方面很乐意处理。
答案 3 :(得分:-1)
奇怪,我从来没有遇到过这个问题。你确定你的控制器编译正确,没有拼写错误吗?我发现通常只需要一两秒就可以看到控制器中反映的变化。域对象更改需要重新启动(它们通常会擦除您保存的数据),并且我发现有时对Spring管理资源(如注入服务)的更改不要采取。但控制器和GSP页面在97%的时间内重新编译:)
我介于GGTS(eclipse)和命令行run-app之间,它几乎总能为我工作。您是否正在进行任何类型的缓存?我在Lion上运行JDK 1.6,grails 2.1.1
通常,您会看到输出告诉您文件已在一两秒内重新编译保存。