play框架的死穴!!??

hulei 发布于 2011/07/19 21:17
阅读 9K+
收藏 8

刚刚提起兴趣看看play框架,写了个例子,看了一篇老文章http://www.oschina.net/question/84960_10522 说是play编译的war包里面全部是java源码,试了一下果然是如此,我用的是最新的play! 1.2.2

非常的无语,如果是java源码不能编译的话,我还不如用php了。请教各位大大,是我技术不到位,还是play本身就是如此?play框架的死穴!!??

以下是问题补充:

@hulei:问题已经解决,现在公布完整的能够编译的命令行: play war YouAppProjectName --exclude app/controller:app/models -o d:/1.war --zip 编译后的的war包中依然会有源文件,编译后的文件在precompiled文件夹。直接发布到tomcat后在删除所有源文件,OK! (2011/07/20 21:27)
加载中
1
大东哥
大东哥

play war --exclude app/controller:app/models -o /home/zdmcjm/tmp/gift

--exclude把不需要包含的目录写上,这里把源码目录加上,类推,多个目录用:隔开。

打成war包,会将源文件编译到precompiled目录里。当然也可以手动删除源码包。

0
Xingjian_Xu
Xingjian_Xu

可以开启预编译,生产环境也是默认预编译,所以只是第一次启动应用的时候要慢些

 

play效率还是不错的,它没有标准的servlet或者jee那么复杂。后端现在采用netty做引擎,处理静态文件的效率也不错了

0
hulei
hulei

引用来自“XuWolsan”的答案

可以开启预编译,生产环境也是默认预编译,所以只是第一次启动应用的时候要慢些

 

play效率还是不错的,它没有标准的servlet或者jee那么复杂。后端现在采用netty做引擎,处理静态文件的效率也不错了

play的确是够简单、够直接,我非常喜欢。阁下说的 开启预编译是否是指在服务器中,.java源文件会自动被服务器编译后,然后每次调用就是运行编译后的代码?
如果是这样的话,如果用play开发商业产品的话岂不是毫无保密性可言?
0
hulei
hulei

引用来自“hulei”的答案

引用来自“XuWolsan”的答案

可以开启预编译,生产环境也是默认预编译,所以只是第一次启动应用的时候要慢些

 

play效率还是不错的,它没有标准的servlet或者jee那么复杂。后端现在采用netty做引擎,处理静态文件的效率也不错了

play的确是够简单、够直接,我非常喜欢。阁下说的 开启预编译是否是指在服务器中,.java源文件会自动被服务器编译后,然后每次调用就是运行编译后的代码?
如果是这样的话,如果用play开发商业产品的话岂不是毫无保密性可言?
如果发布到客户使用的程序全部是源码,那岂不是……
Xingjian_Xu
Xingjian_Xu
是否可以把编译好的字节码打包发布,而不发布源代码,我就不大知道了。即使官方没提供这么个功能,我觉得自己也可以稍微hack一下play框架,解决这个问题。play的源代码写的还是容易看懂的
0
Xingjian_Xu
Xingjian_Xu

对,就是在启动的时候把你写的那堆源文件编译好,再做点字节码的修改,放到一个缓存目录下面,以后就直接使用这些编译好的字节码,而不会再尝试去编译源代码了,这些都是服务器启动的时候就干完的事情,不影响运行期的效率。

当然,开发的时候可以关闭预编译模式,这样你修改的java源文件可以立即产生作用而不用重启服务器,非常方便

0
renwofei423
renwofei423
python 从来是源码。。。一直寻找加密方法中。。。
d
darkread
pyc字节码也不行,轻易反编译。除了虚拟机的都差不多
renwofei423
renwofei423
@无知的TonySeek : 1, 可以反编译。 2,无法编译一个工程,比如django,会提示找不到setting.py 和模块等。
ValueError
ValueError
编译成字节码文件 pyc 或者再进一步 pyo 咯
0
hulei
hulei

引用来自“东明”的答案

play war --exclude app/controller:app/models -o /home/zdmcjm/tmp/gift

--exclude把不需要包含的目录写上,这里把源码目录加上,类推,多个目录用:隔开。

打成war包,会将源文件编译到precompiled目录里。当然也可以手动删除源码包。

总算有解决办法了,等下试试

0
hulei
hulei

东明兄,我爱死你了你的方法很OK,我已经成功发布war包并运行。

现在公布完整的命令行:

play war YouAppProjectName --exclude app/controller:app/models -o d:/1.war --zip

这样控制器和models全部会被编译成.class

0
Honwhy
Honwhy

这样做保密性是做到了,可是打包成war文件还是需要Tomcat等Servlet Container呀,这不是变复杂了么?

PlayFramework本来就是可以抛弃Tomcat等Http Server的呀

我想问问PHPer怎么看待他们的部署情况的?

netkiller-
netkiller-
PHP也有类似Play or Nodejs的方案,在命令行下运行,使用libevent + pthread +pcntl 不依赖fastcgi 和mod_php (不需要web服务器) 语言无界限,俗话说: 小鸡不尿尿,各有各的道。
返回顶部
顶部