V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
WildCat
V2EX  ›  程序员

Web 全栈框架, Rails or Django? (有部分爬虫需求)

  •  
  •   WildCat · 2016-11-06 18:47:28 +08:00 · 10051 次点击
    这是一个创建于 2699 天前的主题,其中的信息可能已经有所发展或是发生改变。

    团队现状: 一共两人,一个负责 marketing/product ,一个(我)负责开发(全栈)。非前后端分离应用。 个人对两个框架的熟悉程度:Rails 过去用的稍多,Django 少一些但是比较熟悉。

    web 框架选择考虑如下几个方面(含个人简介,求评价):

    1. ORM :肯定 ActiveRecord 最方便,但是 Django ORM 也很好用了
    2. 爬虫需求: Rails 里打算 mechanize + nokogiri + sidekiq + whenever ,感觉这样性能不高。 Django 里面打算通过 celery 调用 scrapy 。总体 Python 里写爬虫方便。爬虫有重度需求(约为后端总代码量 30%)。
    3. 后台: Rails 目前考虑 rails_admin ,但是感觉 Django admin 更好一些
    4. asset pipeline : Rails 的感觉挺好用, Django 不了解。即使不行也不用担心,大不了用 webpack 自己打包。
    5. 微信相关库:感觉都差不多。

    纠结的点主要在 rails 和 ruby 上,这两者感觉更新都不活跃了, TIOBE 最近的排名 Ruby 掉得也很快。生态上还是 Python 稍胜一筹。

    71 条回复    2016-11-15 19:55:15 +08:00
    skyboy
        1
    skyboy  
       2016-11-06 19:04:50 +08:00   ❤️ 2
    我有两个更好的推荐:

    1.首推 nodejs+express+mongodb

    2. 次推 php+laravel+postgrelsql

    这两种方案,做W eb 网站还有后台 Api 都可兼吃,关键是快快快.好用.
    janxin
        2
    janxin  
       2016-11-06 19:19:43 +08:00
    你熟悉哪个用哪个,差不多的
    102400
        3
    102400  
       2016-11-06 19:35:59 +08:00   ❤️ 2
    Rails 构建 API 太容易了
    pathbox
        4
    pathbox  
       2016-11-06 20:12:50 +08:00   ❤️ 1
    @skyboy rails 开发速度比你的两个方案快。 性能比 nodes 慢点,但和 larval 差不多吧?
    pathbox
        5
    pathbox  
       2016-11-06 20:15:24 +08:00   ❤️ 1
    Python 的排名比较前 应该不是由于 其 web 开发(除了爬虫)范围做的贡献吧? 爬虫,还是用 Python 吧
    zhouquanbest
        6
    zhouquanbest  
       2016-11-06 20:21:22 +08:00   ❤️ 1
    爬虫?异步?
    那果断 Tornado 啊
    dodo20120
        7
    dodo20120  
       2016-11-06 20:25:32 +08:00   ❤️ 1
    一直在做 rails ,只能说相对来说 rails 的 gem 多,至于后台管理,不要用 rails_admin ,坑多,还不如自己 scaffold 来的快
    aabbccli
        8
    aabbccli  
       2016-11-06 20:38:59 +08:00   ❤️ 1
    @zhouquanbest Tornado +1
    WildCat
        9
    WildCat  
    OP
       2016-11-06 21:03:04 +08:00
    @skyboy 我 node 写过很多, express mongoose 完全不够,很多轮子需要自己找,对于选择困难症来说很浪费时间。
    laravel 写爬虫很不舒服,并且不喜欢 PHP ,个人体验是 php 部署反而比 ruby/python 麻烦。

    @janxin 两个都比较熟悉, rails 略熟悉,只是担心未来。

    @102400 Djangorestframework 也很容易,都差不多的。并且没太多 API 需求。

    @zhouquanbest @aabbccli web 理解,爬虫为什么想用 tornado ?另外不是全栈框架一个人写好累
    davidtsang
        10
    davidtsang  
       2016-11-06 21:49:13 +08:00   ❤️ 1
    选什么语言看排名纯粹是自寻烦恼。如果只有一个人, Rails 是最佳选择。爬虫什么的,可以混搭使用。
    WildCat
        11
    WildCat  
    OP
       2016-11-06 22:46:50 +08:00
    @davidtsang 混搭 python 吗?
    EricCartman
        12
    EricCartman  
       2016-11-06 23:11:47 +08:00   ❤️ 1
    web 框架部分哪个顺手用哪个 爬虫可以用 tornado 或者加个 gevent 之类
    nine
        13
    nine  
       2016-11-06 23:23:17 +08:00   ❤️ 1
    PySpider 结果集导进 rails
    lightening
        14
    lightening  
       2016-11-06 23:23:42 +08:00   ❤️ 1
    我们有个类似项目, web 用 Rails ,爬虫用 Python ,中间用 RESTful API 通信。
    phithon
        15
    phithon  
       2016-11-06 23:40:40 +08:00   ❤️ 1
    django 吧,爬虫+web->django+celery+scrapy 很好的搭配, api 就用 django_restframework ,后台就用 djangoadmin 。完全不用折腾
    janxin
        16
    janxin  
       2016-11-06 23:49:27 +08:00
    @WildCat 有啥未来好担心?
    SlipStupig
        17
    SlipStupig  
       2016-11-07 01:37:57 +08:00   ❤️ 1
    什么熟悉用什么,项目能不能存活都是个大问题,未来没人能知道,尽量先做出来再想生态优化这些问题
    icedx
        18
    icedx  
       2016-11-07 09:04:28 +08:00 via Android   ❤️ 1
    其实我还是推荐瓶子或者龙卷风
    啊 你们有重度的爬虫需求 为什么不找个专业的呢
    ↑指
    wupher
        19
    wupher  
       2016-11-07 09:09:57 +08:00   ❤️ 1
    哪个快用哪个,哪个熟悉用哪个,别担心未来。

    未来如果很美好,挣到钱了大可推翻重来,类似 twitter 。

    未来如果很悲剧,哪怕你是用 Go 写的,也不会有心情维护升级它。
    nanlong
        20
    nanlong  
       2016-11-07 09:33:31 +08:00 via iPhone   ❤️ 1
    肯定 rails 。用 Django 你绝对后悔。爬虫部分的业务可以拆分出来用 scrapy 。
    ryanzyy
        21
    ryanzyy  
       2016-11-07 09:41:34 +08:00   ❤️ 1
    5 年前我会用 RAILS 2 年前用 mean stack 现在的话我会选择 Amazon lambda service
    ryanzyy
        22
    ryanzyy  
       2016-11-07 09:42:57 +08:00
    @ryanzyy + React
    ChiChou
        23
    ChiChou  
       2016-11-07 09:51:54 +08:00   ❤️ 2
    给人推荐 node 不是挖个坑让楼主跳么
    crazycookie
        24
    crazycookie  
       2016-11-07 09:54:35 +08:00   ❤️ 1
    django, 因为楼上面说的所有问题,为啥我觉得 django 都很好的解决了
    cuebyte
        25
    cuebyte  
       2016-11-07 09:55:53 +08:00   ❤️ 1
    用 rails 写网站, python 写爬虫,有什么问题么?
    v2dxt
        26
    v2dxt  
       2016-11-07 09:59:24 +08:00
    @ChiChou node 为什么这么凶残?
    chenwen
        27
    chenwen  
       2016-11-07 10:03:20 +08:00   ❤️ 1
    爬虫用 python
    Jackeriss
        28
    Jackeriss  
       2016-11-07 10:25:57 +08:00   ❤️ 1
    对高并发没特殊要求的话就用 Django 挺好的,开发效率高啊,关键就你一个人开发。
    kvwror
        29
    kvwror  
       2016-11-07 10:37:07 +08:00   ❤️ 1
    感觉楼主心里已经有答案了,我也有类似的需求场景,目前用的是 Rails + scrapyd + scrapy 的组合,通过 Job 的方式,保证爬虫通信。
    liqiazero
        30
    liqiazero  
       2016-11-07 11:07:03 +08:00   ❤️ 1
    要不试试 Elixir+Phoenix+React+Redux ,你们搞 Ruby 的 可以试试哦, elixir 也是可以重写 scrapy, 也有 xpath xml 相关库哦。。
    congteng
        31
    congteng  
       2016-11-07 14:04:16 +08:00   ❤️ 1
    ruby + python 呗 各取所长
    firebroo
        32
    firebroo  
       2016-11-07 16:47:12 +08:00   ❤️ 2
    rails ,因为我感觉,rails 好用
    phun
        33
    phun  
       2016-11-07 16:54:34 +08:00   ❤️ 1
    Rails 大框架, Python 处理细活。选哪门语言,主要是选它的生态。
    zjupigeon
        34
    zjupigeon  
       2016-11-07 17:48:33 +08:00
    没有人推荐 meteor ,神器啊
    WildCat
        35
    WildCat  
    OP
       2016-11-07 21:11:08 +08:00
    @zjupigeon Rails 有 twitter 、 github , Django 有 Instagram , meteor 好像没很成功的公司
    cxbig
        36
    cxbig  
       2016-11-07 21:12:46 +08:00   ❤️ 1
    用你最快能上线的那个,其他技术有空再尝试。
    FrankFang128
        37
    FrankFang128  
       2016-11-07 22:27:19 +08:00 via Android   ❤️ 1
    说 node 的是在搞笑吗?
    node 快? 一堆低质量 package 你敢用?
    zjupigeon
        38
    zjupigeon  
       2016-11-07 23:40:29 +08:00 via iPhone   ❤️ 1
    @WildCat meteor 是一个新兴框架,也许是下一代框架中的牛逼者,自己玩玩可以
    gdong
        39
    gdong  
       2016-11-08 01:03:54 +08:00   ❤️ 1
    哪个最熟悉用哪个;爬虫部分可以用 python
    WildCat
        40
    WildCat  
    OP
       2016-11-08 02:51:47 +08:00
    @zjupigeon 了解, fullstack web framework 排名第一的,主要是不想用 web socket 。
    WildCat
        41
    WildCat  
    OP
       2016-11-08 02:55:37 +08:00
    @nanlong
    @kvwror

    Rails 里调用 scrapy 有什么比较优雅的方法吗?


    @liqiazero Elixir 没干爹,看过语言基础,但是不太想用。 Phoenix 有个疑问就是如何做 cache ?


    @ryanzyy Amazon lambda service 是不是过分押注 AWS 不太好呢? React 是很喜欢但是做这种 quick prototype 开发效率还是不够高,所以暂时不想前后端分离。

    另外十分感谢楼上诸位!
    Miy4mori
        42
    Miy4mori  
       2016-11-08 03:18:54 +08:00 via Android   ❤️ 1
    没必要两种需求都用一种语言实现啊,肯定是混搭使用适合用啥就用啥,不就是图个快, node 系列的技术栈不建议使用,坑多,难踩…
    georgema1982
        43
    georgema1982  
       2016-11-08 08:05:52 +08:00   ❤️ 1
    我个人感觉 django 的设计思路甩 rails 和仿 rails 框架几条街。当然框架本身是否优秀是一回事,你自己熟悉哪个又是另一回事。
    nanlong
        44
    nanlong  
       2016-11-08 09:18:51 +08:00 via iPhone   ❤️ 1
    @WildCat phoenix 做 cache 太简单了 因为 elixir 的底层是 erlang 所以可以使用 erlang 的 ETS 做缓存 连 redis 都不用装. 另外已有 cache 库了, 就在 GitHub 上,这个就是基于 ETS 。 https://github.com/sasa1977/con_cache
    nanlong
        45
    nanlong  
       2016-11-08 09:30:04 +08:00 via iPhone   ❤️ 1
    @WildCat 虽然 Elixir 没有牛逼的干爹,但作者曾是 rails 的核心开发人员,并且此语言作者也参与 phoenix 的开发。我认为做 rails 的那批人才是真正做框架的。吸收无数高手多年的开发精华、最佳实践,融为 Elixir on Phoenix 。
    shyling
        46
    shyling  
       2016-11-08 10:10:32 +08:00 via iPhone
    在我的印象里。。选 ssh 我都不会选 django 。。当然,不是在黑
    kideny
        47
    kideny  
       2016-11-08 10:27:24 +08:00
    1, php 推荐 phalcon ,哈哈。
    blacklee
        48
    blacklee  
       2016-11-08 10:41:09 +08:00   ❤️ 1
    看样子像是在小型创业阶段?
    在这种时候做选择题的话,只有一个标准答案:快!
    这个快是只落地快,而不是什么机器运行速度。
    当前最急迫的事情是以最快的速度验证你们的 idea 是否有人愿意埋单。
    但楼主还有时间纠结框架、语言选择,不免让我一个旁观者对你们项目的前景表示一点点不看好。
    blacklee
        49
    blacklee  
       2016-11-08 10:50:13 +08:00   ❤️ 1
    我的合伙人就有那种典型的技术人员的追求完美的毛病。唉,我忍不住想在这多说两句。
    「 You're not paid to write code, you're not paid to think about problems, you're paid to deliver a working solution, and nothing else matters.」
    在赚到钱之前,不要总想着把代码写得多漂亮,把实现写得多优雅。
    当然这并不意外着代码可以随便写,而是在投入和产出之间要找到一个平衡:代码能工作,可维护。
    TangMonk
        50
    TangMonk  
       2016-11-08 10:52:35 +08:00   ❤️ 1
    web 开发速度, rails 业界最快,没有之一
    crazycookie
        51
    crazycookie  
       2016-11-08 13:54:11 +08:00
    @TangMonk django 一点都不比 Rails 慢
    fx
        52
    fx  
       2016-11-08 14:00:02 +08:00
    不要用 node
    不要用 node
    不要用 node
    fx
        53
    fx  
       2016-11-08 14:00:18 +08:00
    web 开发速度, rails 业界最快,没有之一
    fx
        54
    fx  
       2016-11-08 14:00:34 +08:00
    we b 开发速度, rails 业界 最快,没 有之一
    rupert
        55
    rupert  
       2016-11-08 14:02:47 +08:00
    推荐 elixir/phoenix , 在 productive 和 perf 之间做平衡
    georgema1982
        56
    georgema1982  
       2016-11-09 02:54:58 +08:00
    @crazycookie 事实上比 rails 还快。很多习惯 rails 风格的程序员都有些井底之蛙的感觉
    georgema1982
        57
    georgema1982  
       2016-11-09 02:55:49 +08:00
    @shyling 对于不会用 django 的人来说,你还是一边用 ssh 一边黑 django 吧
    crazycookie
        58
    crazycookie  
       2016-11-09 08:41:20 +08:00
    @georgema1982 django 经历了 10 之久,已经完全是一个体系和生态了。
    传统 web 开发,论速度,工程质量,可维护性,我想知道还有谁?!!
    shyling
        59
    shyling  
       2016-11-09 11:05:22 +08:00
    @georgema1982 仿佛别人什么都不会的样子 0.0
    shyling
        60
    shyling  
       2016-11-09 11:06:54 +08:00
    @crazycookie 仿佛 rails 没它老?
    georgema1982
        61
    georgema1982  
       2016-11-10 05:24:19 +08:00
    @crazycookie 确实 django 在传统 request response 的 app 开发上已经远远领先其竞争对手了。只可惜当初因为 rails 比较火,导致 rails 本身有些盲目膨胀的自信,而其它框架也盲目仿造 rails ,以至于 rails 和其模仿者都没有意识到 django 在 1.4 以后已经在设计理念上远远把它们甩开了距离。
    georgema1982
        62
    georgema1982  
       2016-11-10 05:25:50 +08:00
    @shyling 没说你什么都不会,但你肯定不会 django 。不要以为看了 djangobook 之类的入门教材就叫会 django 了。你其实连 django 的门槛都还没进入,因为真正的 django 代码都不是这种入门教材里那么写的
    WildCat
        63
    WildCat  
    OP
       2016-11-10 05:56:25 +08:00 via iPhone
    @georgema1982 您好前辈,有没有办法接触到您说的这种理念?
    nanlong
        64
    nanlong  
       2016-11-10 08:16:34 +08:00 via iPhone
    @georgema1982 请大概讲一下有哪些设计理念甩开了 rails ?
    crazycookie
        65
    crazycookie  
       2016-11-10 09:44:00 +08:00
    @georgema1982 真正设计理念都是在代码中的,阅读了 Django 的源代码,发现它各个版本的更新迭代非常靠谱
    这个版本没有满足和设计不合理的地方,下个版本就做出了更改,重点是这种修改不是把问题和代码复杂化,而是更加简单。
    我从 1.4 跟到了 2.0 ,经历了没有 migrate ,只有 south 插件的痛苦时期,现在可以 migrate 了,感觉 xx 都通畅了

    Python 中很多项目都在向 Django 致敬,比如 Scrapy ,就是模仿的 Django 的内部结构

    入门教材来说, Django 的文档和教材一级棒, but ,用多了需要自己阅读源代码来补充
    很多人说 Django 太大了,我觉得是很多人无知而无畏, web 的很多问题和轮子这些朋友完全不考虑的,目测其中一大半人连 csrf 都不知道是什么吧。(用 Java , Spring 之类朋友应该超过九成不知道这个是什么,对,黑的就是你)

    点名批评下 laravel , 不要仿造 rails ,(敲黑板!
    再黑一把, PHP 的很多 Framework ,说白了就是 toolkit
    对 ruby 的爱,只有 msf
    crazycookie
        66
    crazycookie  
       2016-11-10 09:48:51 +08:00
    @WildCat Django 和 Scrapy 是无缝对接的啊, 加 3 行代码就行了,直接用 Django 的 ORM 存数据(别和我说你的数据量很大,这个就不推荐了
    shyling
        67
    shyling  
       2016-11-10 10:51:53 +08:00
    @georgema1982 哈哈,我就笑笑
    Matrixbirds
        68
    Matrixbirds  
       2016-11-10 12:24:03 +08:00
    既然都 rails 了 还用 django.. 爬虫服务可以用 node 撒
    georgema1982
        69
    georgema1982  
       2016-11-11 08:41:03 +08:00   ❤️ 1
    @WildCat
    @nanlong
    django 最鲜明的理念就是 DRY 。所以它设计得让程序员可以写几乎没有冗余的代码。用 rails 的人可能说,我的代码也没冗余呀。其实冗余就在那里,但是习惯 rails 的行惯性思维让他们看不到存在的冗余。 rails 最大的问题就是它最初吸引人的特点,即脚手架,说穿了就是一个代码生成器。脚手架生成的代码本身就是一种冗余。为什么?因为生成的 crud 代码都有一样的 pattern ,比如 detail view 都是根据一个主键去获得某个数据; edit view 都是先根据主键获得设据,然后把数据注入一个 form ;等等等等。脚手架不过是反复生成这样的 pattern 。而 django 从 1.4 开始提供 class based view ,这些 view 本身就包含了 crud 的 pattern ,你只要像写配置文件一样配置就可以了,而且这种类似配置的代码不存在任何魔法,只是使用了最基本的 oop 的概念而已,一看就明白。

    再举个例子, django 的 form 也设计得非常好。很多框架的 form 的每个字段依然是基本数据类型,如 string , int , list 等。你要显示它们还要在 view 里使用特殊的 tag 来显示( java 程序员们,这听起来是不是很熟悉?)。而 django form 的每个字段是一个包装得非常好的 field ,每个 field 包含了显示的控件, validation 的逻辑等,所以显示 form 的时候代码可以反复重用。

    另外 django 一个非常重要的理念就是 model 是整个项目中唯一的真理, form 是由 model 决定基本行为的, view 是由 model 决定基本行为的, migration 也是根据 model 来产生的。所以 django 程序员从头至尾都是在思考着业务对应的 model ,而不会被其它东西分心,因为他们知道只要理解了业务,就能定义正确的 model ,而 form , view 都是 model 驱动的(在代码的表现上就是 form 和 view 都是像写配置文件一样,只要指定 model ,一个 app 的基本形态也完成了)。

    所有这些先进的理念都体现出 django 设计者对 oop 有真正深入的理解,实际运用到设计中,而不是只是当作一种教条在那里宣传。当然这也和 python 本身的特点有关,即 python 完美解决了多重继承的问题,使得多重继承没有那么可怕,相反让程序员如虎添翼。
    nanlong
        70
    nanlong  
       2016-11-11 09:07:00 +08:00 via iPhone
    @georgema1982 非常好 请你坚定不移的走 Django 路线 加油
    EzVoodoo
        71
    EzVoodoo  
       2016-11-15 19:55:15 +08:00
    @georgema1982 写得不错。 Rails 和 Django 都用过,总的感觉还是 Too much magic in Rails; Django is much cleaner and clearer.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3224 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 13:53 · PVG 21:53 · LAX 06:53 · JFK 09:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.