grails - 在交互模式下向控制器添加新方法时,请求的资源不可用

时间:2014-08-08 11:48:09

标签: grails

我是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中的错误吗?或者我应该做些什么来激活这个功能?

提前致谢,

马顿

1 个答案:

答案 0 :(得分:0)

  

如果新操作可以在不重新启动的情况下可用,那么就是这样   在演示文稿中演示?

  

这是Grails版本2.4.3中的错误吗?

  

或者我应该做些什么来激活这个功能?

不,你不应该做更多的事情。

重新加载代理应该在交互模式下工作,但显然不是。如果您在https://jira.grails.org/browse/GRAILS提交问题,我们可以查看一下。

感谢您的反馈。