对于新手来说,Python web framework VS. Rails两者间哪个的部署更容易些?且在出现问题时候更好解决些? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
durden
V2EX    Python

对于新手来说,Python web framework VS. Rails两者间哪个的部署更容易些?且在出现问题时候更好解决些?

  •  
  •   durden 2012-03-16 15:39:44 +08:00 5596 次点击
    这是一个创建于 5026 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我并非程序员,但热爱学习,目前有个webapp的小工程,属于公司内部所用,目前在考虑用python web framework(多半会选django,考虑到其学习的资源)或者rails来实现,我之前已试水过两者了,各有好处优势,而我的需求很简单,所以用哪个来实现都行,我有信心将其写出来。

    现在我最关心的是部署,以及如果在运行的过程中出现了问题,是否能够很好加以解决。我的第一感觉是Rails可能更要复杂些,且版本差异较大(我之所以这样说是因为之前学习的时候看过两个教材,一个是3.0.1,一个是3.2的,其过程中3.2报了些3.0.1中没有出现的错,搞了半天才勉强搞好),虽然我能简单操作Linux,但还是担心到时候hold不住,PHP可能最简单部署,但是我还是希望在Rails和Python间选择。
    13 条回复    1970-01-01 08:00:00 +08:00
    ssword
        1
    ssword  
       2012-03-16 15:54:23 +08:00
    rails有capstrino很好用,挣扎上两次之后就可以很顺手了。

    不过猜python也该有类似的东西
    binarymann
        2
    binarymann  
       2012-03-16 20:22:06 +08:00 via Android
    要稳妥的话还是PHP吧
    dreamrise
        3
    dreamrise  
       2012-03-19 18:33:19 +08:00
    huacnlee
        4
    huacnlee  
       2012-03-19 19:27:11 +08:00 via Android
    好不好部署只是熟悉度的问题,不应该作为选择的考虑。
    据我了解, Django 不是 Python 框架的首选。
    huacnlee
        5
    huacnlee  
       2012-03-19 19:29:23 +08:00 via Android
    BTW, 作为来自 Ruby 社区的人来说: “做 Web 选 Ruby on Rails,没错,就它了。”
    bruce
        6
    bruce  
       2012-03-19 19:35:15 +08:00 via Android
    rails 不适合新手,那么多magic
    chloerei
        7
    chloerei  
       2012-03-19 20:10:01 +08:00
    @ssword 昨天 Tx 在 ruby 北京技术聚会上分享,python 的部署工具没那么好用,相当于 cap 的每个过程都要自己写。
    huacnlee
        8
    huacnlee  
       2012-03-19 20:42:15 +08:00 via Android
    是不适合新手,每个新手都必将成为老手...
    chloerei
        9
    chloerei  
       2012-03-19 20:58:03 +08:00
    我觉得 PHP 部署比 Rails 难多了。得懂得 fcgi、nginx rewrite,我服务器上的 PHP 环境现在是完全忘了怎么配的了。

    PS:刚才搜 PHP deploy 找到个有趣的东西 Automated PHP Deployment With Capistrano http://www.jonmaddox.com/2006/08/16/automated-php-deployment-with-capistrano/
    ssword
        10
    ssword  
       2012-03-19 21:16:03 +08:00
    @chloerei 真想当场听一下 :)
    python的框架种类多,做出capistrano这样的部署工具也该没那么容易吧。

    php的话,倒是很难想像没有migration都能怎么搞部署。
    huacnlee
        11
    huacnlee  
       2012-03-19 21:21:40 +08:00
    @chloerei PHP 让很多人觉得不难的原因是因为有 PHP 虚拟主机,FTP 上传就可以用了,连 Linux 都不需要
    bhuztez
        12
    bhuztez  
       2012-03-19 22:39:41 +08:00
    脱离具体场景比较哪个部署更容易,这个还是很有难度的。部署往往是一大堆纠结在一起的小问题。

    PHP未必就真的最简单。尽管现实很可能是PHP最简单。


    最简单的情况,就一台机器,跑一个apache,就只跑这一个应用。php可以用mod_php。python可以用mod_wsgi。ruby可以用mod_rack(就是那个Phusion Passenger)。这种部署方式,看上去这三者基本上没啥区别。

    区别还是有的。

    既然说到部署,肯定逃不掉发行版打包的问题。如果用的是Gentoo,那没有啥区别。如果用的是某些二进制发行版,还用的是比较老的那个,比如CentOS 5,你只能在EPEL里找到python 2.6的mod_wsgi,默认只有2.4的,有些地方可能会严禁使用第三方仓库的,而就算你用了EPEL,你还是找不到Passenger的。当然你也可以说,自己编译再打个包也很方便啊,换个发行版也不难啊。

    PHP > Python > Ruby


    接着扩展一下,别的不变,你现在跑两个独立的应用了。

    这个时候需要权限隔离,不同的应用应该以不同的用户执行。我没有发现mod_wsgi有这样的功能。php可以用mod_suphp,Passenger声称php没有这样的功能,所以Passenger更安全,但是Passenger还要求apache以root执行,这个给人感觉就是好可怕,而mod_suphp,是用类似su的方式切换过去的。

    PHP > Ruby >= Python


    这种感觉很不好,所以进一步改进。一种看上去可行的方案是,改用supervisord来启动应用的进程,而http server用发行版自带的启动脚本启动。看上去配置文件还干净了不少。附带好处是每个应用可以在自己的目录下面安装需要的东西。但是有很多很多小问题等着你呢。不用supervisord,用别的,也依然会有类似的问题。这里把supervisord作为一个典型来讲。

    1. apache的mod_proxy不能反向代理到unix socket,而mod_fcgid之类的模块,很多都有类似,直接全局有效而不是仅在某个域名下有效,这样的问题。lighttpd需要小心处理check-local、broken-scriptfilename、fix-root-scriptname这几个参数。nginx看上去很好,但是nginx的缺点是模块必须静态链接进去,如果没有你要的模块,那就悲剧了。cherokee FastCGI/SCGI之类的反向代理的行为和别的HTTP Server还有点不一样。

    Apache < Others

    2. php可能还好一点,就算用了spawn-fcgi或者php-fpm,php文件还是会自动重新加载?但是,有时候这不是你期望的,你只希望在你更新代码的时候重新加载。Python/Ruby做不到比较好的reload。且不说不能在Windows上运行,supervisord还有个问题,就是用命令行去操作的时候,只要你能连进去,你就有完全的权限。比较理想的情况是根据unix socket另一端的uid来决定能有那些权限。

    PHP > Others

    3. 静态文件的处理。因为放代码的目录默认除了运行该应用的用户,别的都不可读。静态文件得放在一个运行http server用户可读的目录里。这就要求框架或者部署工具能有一些基本的复制静态文件的能力。Django 1.3终于加上了collect_static。别的我不是很了解。谁了解的可以补充一下。


    4. php可能一点问题都没有。Python可能很成问题,用supervisord里fcgi-program来启动应用的进程的时候,会从fd 0传入socket,只要你把这个socket设置成只是http server可读写的话,权限问题其实已经很干净了。但是,绝大部分非FastCGI协议的WSGI Server,都不支持这种方式启动。FastCGI看上去只有flup可用,而且就算是flup,SCGI协议还是不可以以这种方式启动,而且flup还有个很大的问题,就是不支持中文url。而且Python 2.x有个很尴尬的问题是在Windows上不支持socket.fromfd,其实是可以支持的,补丁也早就有了,目标版本都还是Python 2.6,可现在连Python 3都打上补丁了,2.x却没有,那个issue似乎彻底被遗忘了。谁了解Ruby/Rack的可以补充一下,感觉在这点上比Python好一点。

    PHP > Ruby >= Python

    5. 另外一个问题是库。前面提到的发行版的问题依然适用。不过有一点区别。php有不少库得编译,这样就麻烦了。Python有很多库即便提供了C Extension来提高运行速度,纯Python还是可以运行的。这样的库,Ruby比Python略少一些,导致在Windows下有时候会比较悲剧。当然,这个问题上,大家都比不过Perl的。

    PHP <= Ruby <= Python < Perl



    至于多台机器部署,以及其他的一些问题,有时间再来补充一下。
    tylr
        13
    tylr  
       2012-03-19 22:50:02 +08:00
    @bhuztez OMG, 牛x, web开发太难了,连部署都有那么多学问...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2576 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 45ms UTC 13:01 PVG 21:01 LAX 05:01 JFK 08:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86