我为什么放弃rails - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BigZ
V2EX    Ruby

我为什么放弃rails

  •  
  •   BigZ 2012-11-30 10:36:44 +08:00 11255 次点击
    这是一个创建于 4698 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在我看来,ruby&rails有很多优点:

    %w,%q这样的缩写,说明ruby的作者写过大量的代码,coding经验丰富,对php又很深的恶感

    代码block和 函数最后一行作为返回值,这些对于老码农来说,都是特别感兴趣的特点,你如果写过10万行以上的代码,那么你会对一切减少敲键盘的设计都非常喜欢

    rails的ActiveRecord 比django的orm强不少,可以随意的写get_by_xxx函数,可以对某个字段单独update,包括db:migrate工具也是,用起来很舒服

    rails把表单验证都加之在ActiveRecord上,这种设计,对于快速开发的项目,开发效率惊人

    http://lutaf.com/78.htm
    46 条回复    1970-01-01 08:00:00 +08:00
    serco
        1
    serco  
       2012-11-30 10:42:28 +08:00
    我觉得这篇文章显示出来的是作者的无知和轻浮。
    airyland
        2
    airyland  
       2012-11-30 10:43:42 +08:00
    为什么觉得lz是在发贴做推广。。
    kongruxi
        3
    kongruxi  
       2012-11-30 11:03:52 +08:00   1
    「臃肿,安装复杂,特别是在 windows 下」
    在 Windows 下搞 Rails,那是作者自讨苦吃

    「我删除 rails 的时候发现, 里面居然有 bootstrap 这样的玩意」
    这句话我真的看不懂,什么叫删除 Rails ?

    「版本管理必然是噩梦」
    难道作者不知道有 Gemfile.lock 来锁定版本吗?

    「总结: - 作为一个有丰富经验的 django 开发者」
    看到这句话,我终于明白一切了
    timonwong
        4
    timonwong  
       2012-11-30 12:17:23 +08:00
    “%w,%q这样的缩写,说明ruby的作者写过大量的代码,coding经验丰富,对php又很深的恶感”

    “代码block和 函数最后一行作为返回值,这些对于老码农来说,都是特别感兴趣的特点,你如果写过10万行以上的代码,那么你会对一切减少敲键盘的设计都非常喜欢”

    Perl泪流满面
    dreampuf
        5
    dreampuf  
       2012-11-30 12:46:36 +08:00
    低级黑胜过一个高级粉。
    ivenvd
        6
    ivenvd  
       2012-11-30 12:49:32 +08:00
    看到安装复杂我就笑了。
    BigZ
        7
    BigZ  
    OP
       2012-11-30 12:50:22 +08:00
    各位多发表点见解,不要一句话点评
    真理越辩越明
    BigZ
        8
    BigZ  
    OP
       2012-11-30 12:51:04 +08:00
    @timonwong perl的垃圾在于语法很难记忆,一个星期不碰都要重新看手册
    BigZ
        9
    BigZ  
    OP
       2012-11-30 12:55:38 +08:00
    @kongruxi windows确实比较好用,我有一台imac,一台mac air,但还是用windows多

    删除rails就是删除rails安装包

    gemfile.lock 这种暗喻约定,可以吓退90%的新人

    开发工具也是一种产品,需要考虑用户体验,不能成为小圈子的玩具


    php这样琐碎,麻烦的语言却长期排web开发语言top,就是因为简单,容易部署
    iloveyou
        10
    iloveyou  
       2012-11-30 12:56:41 +08:00
    都怪腾讯的RTX没有linux版,害的我没法用ror
    Alcar
        11
    Alcar  
       2012-11-30 13:17:15 +08:00
    @BigZ windows桌面使用是好用,难道你也在服务器上用windows?
    26z
        12
    26z  
       2012-11-30 13:21:02 +08:00
    BigZ
        13
    BigZ  
    OP
       2012-11-30 13:36:02 +08:00
    @Alcar 工作/家庭环境 2台mac+2台windows
    服务器当然全是linux,我之前写过一篇文章讲我的选择
    pepsin
        14
    pepsin  
       2012-11-30 13:45:11 +08:00   1
    @BigZ Rails省事就是因为有那么一大堆约定,习惯就好了。自由的前提是有合理的规矩。
    cranej
        15
    cranej  
       2012-11-30 14:02:01 +08:00
    被 LZ 文章里的理由影响而决定不用 Rails 的不值得被引导来使用 Ruby / Rails 。所以,没有“辩”的价值。 LZ 是在帮助阻止一些不靠谱儿的开发者进入。保持一个社区小而精,这样招聘/找合作伙伴的时候会轻松很多。
    reducm
        16
    reducm  
       2012-11-30 14:11:46 +08:00
    楼主文章关于rails部分除了windows麻烦外,其他都是错的,楼主学习Rails除了那本旧书外到底是参看了什么资料?
    Narcissu5
        17
    Narcissu5  
       2012-11-30 14:13:10 +08:00
    @Alcar 根据IDC的数据,服务器市场上有将近一半都是windows,linux和unix加起来也赶不上windows。
    hidden
        18
    hidden  
       2012-11-30 16:44:37 +08:00
    @Narcissu5 我所看到的Windows使用者类型:

    历史问题,用.net的网站绑在了windows上,或者有些程序只有Windows版。
    技术员不会linux,甚至技术方面都不会但是要去折腾一个网站,所以选windows,习惯操作。

    你按照总的数量来算的这部分机器是很多的,大多是些企业站,论坛,地方门户之类的。

    如果只算互联网这个圈子,稍微有点儿折腾能力的都不会去选Windows。何况还是在折腾Rails,python这类东西的技术人员。。
    huyipeng
        19
    huyipeng  
       2012-11-30 17:38:49 +08:00
    我好奇点了两个讨论帖,就看到两次的《鲁塔弗的博客》,不知道是为了引发讨论而讨论还是真心在讨论????@v2ex
    flyingkid
        20
    flyingkid  
       2012-11-30 18:07:00 +08:00
    @kongruxi 其实作者根本还没有理解rails。大概入了点门。。
    BigZ
        21
    BigZ  
    OP
       2012-11-30 22:01:53 +08:00
    @cranej 技术搞小圈子是没有生命的
    BigZ
        22
    BigZ  
    OP
       2012-11-30 22:03:27 +08:00
    @reducm 能否写出更多有价值的论据呢?而不仅仅是结论
    使用某种开发工具的时候,我通常习惯翻开代码, rails这两年难道有什么跨代的改进么?
    BigZ
        23
    BigZ  
    OP
       2012-11-30 22:06:05 +08:00
    @hidden windows做服务器,企业市场居多

    互联网用windows太不方便了,首先是网速一般的情况下,用GUI操作不流畅
    BigZ
        24
    BigZ  
    OP
       2012-11-30 22:09:04 +08:00
    @huyipeng 请你不要发表这些低劣言论,类似问题我已经回答过超过3次了,我将不再回应

    请关注我的观点本身,无论你赞同与否,多写几个字,说你的论据,对大家都有帮助
    不要跑题
    cabbala
        25
    cabbala  
       2012-11-30 22:11:32 +08:00
    @Narcissu5 这是老梗了。。还有人信。。
    BigZ
        26
    BigZ  
    OP
       2012-11-30 22:13:16 +08:00
    @pepsin 这点我赞同,实际上我自己编写的框架都是约定多于配置

    rails本身很精良,放弃它主要是 各种代码生成器太慢+胡乱引入第三方包
    fwee
        27
    fwee  
       2012-11-30 22:31:12 +08:00
    笑了,这个作者看来更喜欢写一堆xml配置。

    约定优于配置这么好的地方居然都黑。。
    真想问他从哪个版本找到的bootstrap
    blankyao
        28
    blankyao  
       2012-11-30 22:47:13 +08:00
    楼主应该是装了某个Gem,然后这个Gem带了或者依赖bootstrap吧?
    hepochen
        29
    hepochen  
       2012-12-01 00:45:58 +08:00
    LZ说的rails比django强大的地方,实际django也能做;说rails不灵的地方,就真的不灵了?

    用django做例去说明对方的“臃肿”,这种说明是不恰当的,python和ruby两兄弟有时吵吵挺有趣的,但这样子真的没有水准了。

    LZ虽然写了10年代码,但是仔细看了你的博客,坦白说,技术水平真的不像有10年的样子,“ 作为一个有丰富经验的 django 开发者” 这句话,唉,你真的不算有经验,丰富更谈不上了。而且对产品经理的理解也很基础。

    我觉得能理解LZ,但相信你也不会很容易听进去;特别是一些貌似正确的理论听得越多,自己几经转述,就越容易脱离正轨。

    因为之前下面带过类似的同事,能做事,踏实靠谱,但是在我的世界中属于不够聪明的一类人;实际管理中还必须要夸他聪明,强烈的需要得到认同。时间越久,感觉距离就越远。当然,人家也混得不错。

    只是,时间越久,人越老,戾气有些时候也会多起来。

    另外,就算是推荐新人去学rails,也不应该去推荐php吧?你不是在挤兑rails,你其实在毁python和django。
    workaholic
        30
    workaholic  
       2012-12-01 08:50:41 +08:00
    初级软文
    reducm
        31
    reducm  
       2012-12-01 14:13:27 +08:00   4
    @BigZ 回楼主,你的行文风格让我觉得你是比较难以说服的人,所以我在想指出一下,除了你说windows安装麻烦之外,与我所见印象中的Rails特点都有出入,除此之外就是天可怜楼主假如你还肯再去深入了解一下Rails,和一些新版本的特性,或会撤回你之前的观点让这贴不再继续下去。

    不说论据可能就是觉得这是很麻烦的事,特别是自己浅显易见的东西但别人不肯花点时间去了解就去草草得出另一结论,这很多时候都会产生无力感,相信也是很多用Rails的同学不愿回应的原因

    题外话,我觉得楼主博客界面设计得挺简洁,挺好看的

    你的文章一开始罗列了很多你过去的经验,“rails,我07年买过一本 Agile web development with rails,这次翻出来重新看了一遍”,到这句为止还未看到和“我为什么要放弃Rails”有相关的东西。

    “%w,%q这样的缩写,说明ruby的作者写过大量的代码,coding经验丰富,对php又很深的恶感”,不明白为什么会得出“说明ruby作者对php有很深的恶感"的结论

    “rails的ActiveRecord 比django的orm强不少,可以随意的写get_by_xxx函数”
    楼主应该是说写find_by_xxx的函数吧?

    “各种生成器慢的惊人,任何一个操作都要等5-6秒”



    这是在我自己mbp13寸低配上面直接生成scaffold的时间,已经同时生成了model,controller,view,test一堆东西了,我觉得这时间还可以接受。Ruby的性能是比不上其他脚本语言,但再重申一下Ruby圈子的哲学就是,快速把东西做好,等到你产品真要为那高访问量带来的性能问题烦恼的时候,你已经幸福死了。还有恶感php的Ruby作者说,Ruby2.0出来的时候,会让大家觉得性能问题不再是个问题,对这个我们还是蛮有期待的。

    “约定太多,每个model都要按部就班的定义controller,每个controller,model都只能定义在单独的文件当中”
    约定优于配置,貌似楼主上面几楼已经肯定了这个好处,另外我也不太了解一个文件可以多写几个model和多写几个controller有什么好处,我最近用spine,很多时候贪方便一个文件写好几个controller,我觉得维护时定位代码起来很麻烦,一个文件塞太多东西也不美观。

    “rails版本维护者,已经进入魔怔,任何一个第三方包,只要他们觉得有点用,就要整合进入rails安装包中,我删除rails的时候发现,里面居然有bootstrap这样的玩意!!!

    Rails的core team每次引入新特性,他们都有足够的理由,而绝大部分的特性经历过一段时间洗礼后,都被我们开发者认同,像引入bundle去管理gem, assets pipline管理静态文件(甚至可以包成gem方便复用), sass去写css, coffeescript写js,restful, 这些都是让我们幸福得发慌的好特性,我以前搞PHP的时候,从来不知道web开发能这么的舒服。另外Rails从没什么胡乱继承一堆东西进来,像是4.0开始就会把很多有更好取代方案的东西废弃掉。至于楼主说的bootstrap问题,我自己一路以来情况从未见有集成过bootstrap的rails版本,还希望楼主多多求证再作结论。当然我们也不会刻意说什么这写特性就比django要好多少多少的,大家哲学本来就不同,我们喜欢拥抱变化和追求更新更好的解决方案,python还要解决到底用2还是3问题:)

    “第三方包都有各自的开发者,他们没有统一的协调,每个人都按照自己的想法升级版本,rails集成这样的多的包,版本管理必然是噩梦”
    相反地,bundle版本管理下这不但不是噩梦,而且在你项目有了测试下,升级gem基本上不会怎样的痛,而且,DRY原则下,github众多的gem包让我们幸福得发慌...

    “如此多的依赖包,会让初学者不知所措,极大的影响项目本身的推广”
    这是楼主说Ruby/Rails社区是小圈子的论据吧? 楼主觉得一个初学者上手框架,学习顺序是应该先了解框架的核心特性,还是先去学一堆依赖包插件什么的? Ruby/Rails的确中文资料不多,但Rubier更喜欢一手英文资料,所以能进圈子的都是自学能力和解决问题能力比较强的人(我所见,如不同意还请噗嗤一笑),讨论氛围也是我比较喜欢的(过去java,php...),我甚至有时觉得搞一些很基础的视频教学会拉低这个圈子的水平(个人意见),小圈子很好啊,小的力量是很大的。外国呢,github库数量好像第二主流语言就是ruby吧?

    “作为一个有丰富经验的django开发者,我考虑再三还是继续使用django写网站 - java web开发者,可以尝试学习使用rails - 没有任何开发经验的开发者,建议学习php,有一定经验之后根据自己兴趣选择 - python程序员,完全不需要考虑rails”
    总结也是很奇怪,前文有说为什么java web可以尝试使用rails吗? 还有php,还有python...文章看不出这总结的理由啊

    我没有10年开发经验,我不觉得Rails比Django好很多很多,但我也很难说出Rails有什么地方让我觉得有噩梦般的地方,最后推荐楼主看一下Rails官方的guide,希望楼主这不是钓鱼软文,不然我就浪费了写文字的时间
    twm
        32
    twm  
       2012-12-01 14:35:29 +08:00
    php框架Symfony2写的一个项目代码预览:https://github.com/tangwenming/Ghost
    Keinez
        33
    Keinez  
       2012-12-01 15:02:35 +08:00   1
    挺会做推广的啊。几乎每个帖子都链一个链接到你的BLOG,半数帖子都在引起口水战,说什么好呢?
    BigZ
        34
    BigZ  
    OP
       2012-12-02 14:31:39 +08:00
    @reducm 感谢你的回答,给这个帖子增加了很多价值
    认知的差别来自于基本哲学的不同,我习惯于用简单的方法解决问题,偏好简介,任何一段文字如果还需要花时间去反复琢磨,我会立即厌倦的

    1.生成器速度的问题,我虽然有很多mac设备,但是还是习惯在windows上开发,没有安装ssd的计算机,不会是1s的速度
    2.如果代码分布在多个文件中,查找函数需要在多个文件中切换,其实很不方便
    3.github库数量好像第二主流语言就是ruby吧?--这句话就是最好的论据,github当初为了rails而生,2年不到就被nodejs干趴了,就是因为nodejs配置足够简单,你作为一个rails熟手是难以体会 新人面对未知事物的恐惧
    4."总结也是很奇怪"--可能表述不详细,大家有误解,我的结论是

    ruby/rails是比所有python web框架更完善的web开发工具,但并不完美,和django对比,rails没有压倒性的优势,反倒有让人很不爽的地方
    fwee
        35
    fwee  
       2012-12-02 15:22:37 +08:00
    原来是lz写的啊。。10年就这水平。。真是。。
    zhy0216
        36
    zhy0216  
       2012-12-02 15:39:19 +08:00
    @hepochen "因为之前下面带过类似的同事,能做事,踏实靠谱,但是在我的世界中属于不够聪明的一类人;实际管理中还必须要夸他聪明,强烈的需要得到认同。时间越久,感觉距离就越远。当然,人家也混得不错。"
    这话说的重了了吧... 甚至觉得带有人生攻击的意思... 个人感觉啊...
    我觉得讨论问题归讨论问题, 最好不要涉及对个人的评价吧.
    hyq
        37
    hyq  
       2012-12-02 17:43:17 +08:00
    @BigZ 就现在看来,ruby for windows实在是很慢,不是ssd能解决的问题,如果楼主你坚持用windows,甚至服务器也用windows,你根本不用写这篇文章,因为ruby真不适合你....
    goofansu
        38
    goofansu  
       2012-12-02 18:41:23 +08:00
    写ruby用windows不是找虐嘛
    BigZ
        39
    BigZ  
    OP
       2012-12-03 10:40:20 +08:00
    @goofansu 因为windows确实好用,用的习惯
    greatghoul
        40
    greatghoul  
       2012-12-05 19:53:02 +08:00
    @BigZ rails 在 windows 下面就是水。

    Rails是好东西,这点是肯定的。

    至于和 django 比较,我觉得是全看个人喜恶了,我是 python 开发人员,但是仍然不喜欢 Django,而是倾向于 Flask 和 Web.py ,甚至 Uliweb 也很赞。我想这完全是个人喜好。

    Ruby 和 Python 争吵是常有的事,我觉得这样挺好,只是不是人身攻击,对双方都有益处。

    > 2.如果代码分布在多个文件中,查找函数需要在多个文件中切换,其实很不方便

    这个我看不懂,Django 难道代码都混在一起吗?我想如果你用 RubyMine,会觉得查找函数简直不是个问题,当然,如果你是 vim 党, vim-rails 也绝对会让rails很方便。
    还是我对这句话本身理解有误?
    greatghoul
        41
    greatghoul  
       2012-12-05 19:56:31 +08:00
    @BigZ 我很想知道,楼主怎么让 Rails 能够在 Windows 下正常的工作起来。

    公司里面几个人,不太适应 Linux 的环境,但我们尝试在 Windows 下开发 Rails ,但怎么都跑不起来。楼主能否给一些资源参考。

    感激不尽。
    madao
        42
    madao  
       2012-12-06 01:23:42 +08:00
    Rails 最大的优点在于约定优于配置 被老知识奴役多了适应不了么
    BigZ
        43
    BigZ  
    OP
       2012-12-07 12:58:08 +08:00
    @greatghoul http://railsinstaller.org/ ,这个有个all in one的安装包

    你非要用rails,最好还是用ubuntu,别用windows了,另外要机器要加一块 ssd
    BigZ
        44
    BigZ  
    OP
       2012-12-07 13:03:44 +08:00
    @greatghoul

    在django中,我可以把所有request函数写在一个views.py中,查起来方便,只需要打开一个文件

    对中型以上的应用,不推荐flash,web.py,bottle之类的,你可以看这篇
    http://lutaf.com/50.htm 文章。我最近2年做小规模网站用php写了个框架搞,已经让我很厌倦了
    ORM和后台admin 特别费时间 ,django解决了这个问题

    对于只有几个页面的应用,或者干脆就是若干个rest api调用,可以用flash,web.py等,需要render html的,我一般用php,无性能压力的纯http接口,通常用bottle
    BigZ
        45
    BigZ  
    OP
       2012-12-07 13:07:24 +08:00
    @madao 计算机领域知识永远不过期

    目前cpu的各种“先进”技术,5,60年代就提出来了,当时不用,而现在成为大卖点,那是应用场景变换了

    你要弄懂 “约定大于配置”的内涵,这世界上没有银弹
    greatghoul
        46
    greatghoul  
       2012-12-07 13:12:28 +08:00
    @BigZ 如果放在一个 views.py 中,查看 requestA 时 还想同时对照修改 requestB 怎么办?滚动条滚来滚去么?

    如果是多个文件中,可以很方便的用 VIM 或者 IDE 的窗口切分,而且按功能模拟分的 request 更容易查找一些吧,如果真的是中型以上的项目,request必然很多(比如说几百个,都写在一个里面,一来单文件很臃肿,而且即便 IDE 能够提供代码的outline,也不容易快速定位到某一个具体的方法吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1203 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 17:29 PVG 01:29 LAX 10:29 JFK 13:29
    Do have faith in what you're doing.
    ubao 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