2010-11-23 33 views
4

我在客户端服务器上的tomcat6上部署了grails应用程序,但应用程序仍然需要很多修复,所以每个在客户机上创建或缺少功能的bug,我都会创建一个补丁并通过ftp上的.tar.gz文件传递给客户端,该文件将替换已部署的文件夹。在已部署的grails上创建补丁的简单方法应用

由于应用程序很大(〜80M),我无法发送完整的.war文件,所以发送更改.class文件是我唯一的选择。但创建补丁的过程是太耗时,尤其是重建项目,清理目标文件夹并开始编译项目中的所有文件。之后,我使用比较文件夹应用程序在新的目标/类文件夹中比较旧的目标/类文件夹搜索不同的.class文件,并将其发送到客户端。

创建战争过程真的花了很多时间,只是为了修复一个小事情,有没有办法更简单的编译代码获得不同的.class?因为我需要在2-3天内创建补丁程序,每个补丁程序都可以修复常规客户端报告的一些小内容。

谢谢,

回答

2

我们构建WAR文件,然后在本地解压缩并将本地分解的WAR(使用RSync)与服务器上的分解WAR(在开发人员Windows计算机上使用Cygwin)同步。 RSync协议非常高效,因此通过Internet进行部署非常快速,但WAR文件生成仍然需要很长时间:(

我们在开发人员计算机上和服务器上都有脚本,因此我们的部署机制是非常痛苦的,如果你折扣WAR构建时间,并且我们不直接进入生产目录的rsync,我们等到rsync完成,然后在服务器上运行一个脚本,在备份以前的生产版本的情况下

+0

感谢您的答案 – ikhsan 2010-11-24 09:57:55

0

没有办法为Grails应用程序创建补丁。如果您正在交付应用程序的人员愿意将图书馆置于tomcat共享库目录中,请参阅this link以获取有关如何将war文件大小降低至几个megs而非80的信息。

+0

你的链接不再有效 – cdeszaq 2013-01-23 19:14:40

0

从技术上讲,还有另一种方法在运行时更改代码:这是Groovy中,这样你就可以重新分配类方法在运行时,像

MyDomainClass.metaclass.'static'.'method' = { some closure; } 

虽然,这是非常危险的,而不是重新启动防。

你可以在Groovy Web Console这样做。 Web Console的暴露是另一个严重的安全漏洞。

我建议你检查你的类到源代码控制,并建立在目标机器/目标网络。 SVN流量被压缩,所以交付时间不会很长。

2

我们要做的是一个干净的

grails clean 

然后创建一个战无罐

grails war --nojars 

上传然后5MB(这需要一段时间),但它比50/80MB更快。如果我们添加一个插件TC,那么我们需要做一个完整的上传/构建。

然后我们解压战争在战争爆炸的顶部和重新启动Tomcat /码头/等

希望这有助于。

+1

没有罐子我仍然有36MB,作为维克托建议我确定会改变VPS的编译过程(我在服务器上有git)所以我不需要上传文件,并将lib库移动到tomcat上的shared/lib,正如jared所说,bu这个大小对于下载客户端来说太大了,只是为了修复一些小东西。 – ikhsan 2010-11-24 02:05:13

0

另一种选择是使用源代码控制(像mercurial或git这样的DVCS很适合这种工作),并让客户端为你想要给他们的代码分配一个只读版本。然后有一个构建脚本(gradle/ant/gant),可以下载/安装grails并编译生产战文件并部署它。

+0

好主意让客户端访问存储库,但我不能让客户端有源代码。 – ikhsan 2010-11-24 02:34:01