我通常从IDE运行Grails 2.0,但一直在寻求将应用程序部署到远程虚拟专用服务器(linux),我安装了Tomcat和Mysql。我创建一个生产WAR文件并将其复制到Tomcat webapps目录,在那里我可以看到Tomcat重新启动,在一些“修复”后我看到应用程序出现了,将最小的引导条目添加到MySql数据库中。
但是,我无法连接到Grails应用程序(远程)。如果我指定www.mydomain.com,我(最终)能够到达主要的Tomcat服务器“欢迎页面”。如果我在末尾添加“/”,我也会到达Tomcat,而不是我的grails应用程序。
因此我尝试将完整的控制器路径放在我的开发机器上,然后在远程机器上访问它们(注意grails.serverURL配置为http://www.mydomain.com)。这样做,我得到
HTTP Status 404 -- The requested resource (/BareBones/bare/create) is not available.
此错误来自我创建的 BareBones 应用程序,因为我遇到了VPS可用内存的一些问题。无论如何,在我的开发机器上,我可以访问这个BareBones应用程序URL
http://localhost:8080/BareBones/bare/create
正如所料。当我部署时,我得到相同的HTTP状态404错误(资源不可用):
http://www.mydomain.com/bare/create
在Config.groovy中,在这个BareBones应用程序中,我得到了最小的改变:
environments {
development {
grails.logging.jul.usebridge = true
}
production {
grails.logging.jul.usebridge = false
grails.serverURL = "http://www.mydomain.com"
}
}
在我的Tomcat server.xml文件中,我从默认的8080/8443端口切换到80/443,但使用任一设置都会导致同样的问题。
我可能错过了一个简单的步骤,只是不知道它是什么。
P.S。当我部署Tomcat附带的sample.war文件(不是Grails,只是一个hello-world servlet)时,它可以工作。我可以在
访问它 www.mydomain.com/sample
由于我将sample.war从我的计算机FTP到服务器,它似乎表明我的FTP很好,并且到服务器的路由是正确的,将其缩小到Grails& Tomcat中。
答案 0 :(得分:1)
通常在开发模式下,正如您所指出的那样,Grails会安装appName
的上下文,即http://localhost:8080/BareBones/
。
但它在tomcat上安装的路径不符合Grails本身,它完全依赖于Tomcat配置,主要依赖于WAR文件的名称。
即使您将BareBones作为appName
并将其部署为ROOT.war,它也会挂载根"/"
上下文。如果将其部署为BareBones.war,那么它应该安装与开发模式相同的目录。
由于网站通常以ROOT.war "/"
的形式安装,因此我建议您设置
grails.app.context = "/"
在你的Config.groovy
文件中,这样你就可以在dev中使用根上下文路径,即http://localhost:8080/
这使得它更简单,因为开发和生产现在都具有相同的相对路径到任何地方,只有主机名:端口将改变。