我是Grails的新手,了解它的基础知识。我做的第一件事就是关注https://grails.org/learn的演讲。根据这一点,应该可以在应用程序以交互模式运行时(由运行应用程序目标启动)向控制器添加新方法,并将该方法作为操作进行访问,而无需重新启动应用程序。
当我尝试这样做时,我从Web服务器收到错误消息404,并附有解释:“请求的资源不可用”。重新启动应用程序后,新方法可以正常工作。
我正在使用:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.5 LTS"
$ java -version
java version "1.7.0_65"
Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
Java HotSpot(TM) Client VM (build 24.65-b04, mixed mode)
$ grails -version
Grails version: 2.4.3
我做的步骤:
$ grails create-app grailsapp
| Created Grails Application at /home/marci/grailsapp
$ cd grailsapp/
$ grails
| Daemon Started
grails> create-controller hello
| Compiling 10 source files
| Compiling 131 source files
| Created file grails-app/controllers/grailsapp/HelloController.groovy
| Created file grails-app/views/hello
| Created file test/unit/grailsapp/HelloControllerSpec.groovy
grails>
我在index()
中实施了grails-app/controllers/grailsapp/HelloController.groovy
:
package grailsapp
class HelloController {
def index() {
render "index"
}
}
保存文件,运行应用程序:
grails> run-app
| Running Grails application
| Server running. Browse to http://localhost:8080/grailsapp
| Application loaded in interactive mode. Type 'stop-app' to shutdown.
| Enter a script name to run. Use TAB for completion:
grails>
使用浏览器检查http://localhost:8080/grailsapp/hello/index
,工作正常。
现在我添加了另一种方法:
package grailsapp
class HelloController {
def index() {
render "index"
}
def somemethod() {
render "somemethod"
}
}
保存文件。 Grails似乎注意到了源代码的变化并重新编译了文件:
| Compiling 1 source files
| Compiling 1 source files.
| Compiling 1 source files..
| Compiling 1 source files...
| Compiling 1 source files....
| Compiling 1 source files.....
grails>
现在,如果我尝试通过浏览器中的URL http://localhost:8080/grailsapp/hello/somemethod
访问新方法,那么Tomcat会说:
HTTP Status 404 -
type Status report
message
description The requested resource is not available.
Apache Tomcat/7.0.55
请注意,该消息为空。如果我尝试访问不存在的方法,我会收到一条消息,因此会出现其他错误。例如http://localhost:8080/grailsapp/hello/doesnotexist
:
HTTP Status 404 - /grailsapp/hello/doesnotexist
type Status report
message /grailsapp/hello/doesnotexist
description The requested resource is not available.
Apache Tomcat/7.0.55
如果我以交互模式重新启动应用程序并再次尝试somemethod
操作,那么它可以正常工作。
grails> stop-app
| Server Stopped
grails> run-app
| Running Grails application
| Server running. Browse to http://localhost:8080/grailsapp
| Application loaded in interactive mode. Type 'stop-app' to shutdown.
| Enter a script name to run. Use TAB for completion:
grails>
现在http://localhost:8080/grailsapp/hello/somemethod
会返回我期望的回复。
我的问题是,如果新的操作无需重新启动就可以使用,正如演示文稿中所示?这是Grails版本2.4.3中的错误吗?或者我应该做些什么来激活这个功能?
提前致谢,
马顿
答案 0 :(得分:0)
如果新操作可以在不重新启动的情况下可用,那么就是这样 在演示文稿中演示?
是
这是Grails版本2.4.3中的错误吗?
是
或者我应该做些什么来激活这个功能?
不,你不应该做更多的事情。
重新加载代理应该在交互模式下工作,但显然不是。如果您在https://jira.grails.org/browse/GRAILS提交问题,我们可以查看一下。
感谢您的反馈。