V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coool
V2EX  ›  Ruby on Rails

Ruby, Rails 不值一学

  •  
  •   coool · 2020-11-11 12:12:49 +08:00 · 12421 次点击
    这是一个创建于 1508 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是前两天开的帖:https://www.v2ex.com/t/723318

    我的工作是 Go 开发,因为总听说 Ruby 、Rails 很吊,所以业余打算学学,选了《 Agile web development with Rails 6 》一书看的,折腾了 3 天准备放弃了,真的不值一学。

    如果一项编程语言的入门,大量时间要花到折腾环境、各种乱七八糟的报错上而无法聚焦到语言、框架本身,那还谈什么提高?

    当初学 Go 也就小半天搭了环境就开始写了,Rails 整了 3 天,每天十个小时,到现在rails new demo都没跑起来,确切的说是没完全跑起来。

    安装 Ruby 、Rails就不说了,rails new demo各种报错,最后localhost:3000访问到了,但是自从执行 了bin/rails generate controller Say hello goodbye,历数我遇到的各种奇怪的报错,完全没有任何解决方案:

    • 比如执行bin/webpack-dev-server报错:
    node:internal/modules/cjs/loader:903
      throw err;
      ^
    
    Error: Cannot find module 'webpack-cli/bin/config-yargs'
    Require stack:
    

    官方 github issure 各种说版本问题,还让在packge.json加了scripts:代码,换成webpack serve啥的,没点用,我就奇怪了前端圈各种软件库啥的升级从来不考虑向后兼容吗?约定的命令说改就改,改了还没啥用,解决不了旧问题还制造一堆新问题。github 、stack overflow 、csdn 之流都没有任何解决方案:https://github.com/webpack/webpack-dev-server/issues/2759, https://blog.csdn.net/Piconjo/article/details/105744808


    …………
    ……………………
    ………………………………

    • 唯一一个解决的问题是执行bin/rails generate controller Say hello goodbye没啥反应,用了spring stop

    • 现在我的 rails 是这样的:

    $ bin/rails about
    
    About your application's environment
    Rails version             6.0.3.4
    Ruby version              ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin19]
    RubyGems version          3.1.4
    Rack version              2.2.3
    Middleware                Webpacker::DevServerProxy, ActionDispatch::HostAuthorization, Rack::Sendfile, ActionDispatch::Static, ActionDispatch::Executor, ActiveSupport::Cache::Strategy::LocalCache::Middleware, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, ActionDispatch::RemoteIp, Sprockets::Rails::QuietAssets, Rails::Rack::Logger, ActionDispatch::ShowExceptions, WebConsole::Middleware, ActionDispatch::DebugExceptions, ActionDispatch::ActionableExceptions, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ContentSecurityPolicy::Middleware, Rack::Head, Rack::ConditionalGet, Rack::ETag, Rack::TempfileReaper
    Application root          /Users/coool/ruby/work/demo
    Environment               development
    Database adapter          sqlite3
    Database schema version   0
    

    package.json文件是这样的

    {
      "name": "demo",
      "private": true,
      "dependencies": {
        "@rails/actioncable": "^6.0.0",
        "@rails/activestorage": "^6.0.0",
        "@rails/ujs": "^6.0.0",
        "turbolinks": "^5.2.0",
        "webpack": "^5.4.0"
      },
      "scripts": {
        "serve": "webpack serve"
      },
      "version": "0.1.0",
      "devDependencies": {
        "webpack-cli": "^4.2.0",
        "webpack-dev-server": "^3.11.0"
      },
      "babel": {
        "presets": [
          "./node_modules/@rails/webpacker/package/babel/preset.js"
        ]
      },
      "browserslist": [
        "defaults"
      ]
    }
    

    可能 Rails 确实是殿堂级的框架,但是这个框架的门槛在云上,我在地上上不去……各种环境、升级、代理设置、global 翻墙都没用、版本不兼容、乱七八糟的报错,是我在写 Go 的时候从来没有遇到过的。

    另外吐槽一下 Ruby-China 真的……不知道有多少人的耐心是 7 天,反正我这三天,每天十几个小时的折腾这些报错已经耗尽了耐心,放弃了。

    第 1 条附言  ·  2020-11-11 13:33:02 +08:00

    看了很多评论是批评我不懂前端让rails背锅的,不懂前端我承认,让rails背锅我不认同。这些问题是我按照rails教科书实践产生的,而不是我上来自学js、webpack遇到的问题。既然是rails6集成了这些,就是学rails的过程遇到的绕不开的问题,为什么不能归结到rails呢?难道学rails之前还要先精通js、webpack么?感觉这个大佬说的有道理:

    @reus 十年前接触过一下,当时前端也没有这些东西,都是服务器端输出 html 完事 后来就是前后端分离的时代了,其他框架就专注于做 api 服务器了 rails 不是,它既要坚持服务端渲染,又要拥抱现代 js 生态,于是就把 webpack 这类 js 工具链引入了 rails 里面 这是个绝对的败笔,js 生态是相当不成熟的,是相当混乱的,即使是 webpack 这类基础工具,版本之间根本没有兼容性可言 于是就出现楼主这样的遭遇了 现在的大势就是,后端就做后端,前端就做前端,前后端通吃的 web 开发,已经是移动互联网成为主流前的老古董了 确实不值一学

    第 2 条附言  ·  2020-11-12 11:12:36 +08:00
    没想到引来这么多围观,很感谢大家的热心指教或冷嘲热讽。我确实很菜,和语言没关系,也不是要引战。科班毕业数年颠沛流离、浪迹南北,前两年有了对象方才幡然醒悟。目前也只会写点 go 勉力维持温饱的样子,没什么能力,只想在技术上有所精进,到了被淘汰的那天还能单枪匹马、以此谋生。

    昨天灰心了一天,今天按照 @046569 大佬的步骤尝试继续出错,可能是我胡乱执行命令把本地环境污染的乱七八糟了:

    https://imgur.com/lHJ20P2

    https://imgur.com/Np95aLl

    然后今天我试着在我的阿里云上安装操作,现在已经可以了,下一步配置一下 vscode 远程开发应该可以继续学习了。

    https://imgur.com/a/UKwrwON

    感谢 @jasl 、 @qiumaoyuan 、 @chloerei 等各位大佬的指点和鼓励。
    166 条回复    2021-08-05 16:12:51 +08:00
    1  2  
    abcbuzhiming
        1
    abcbuzhiming  
       2020-11-11 12:20:19 +08:00   ❤️ 10
    说 ruby on rail 经典,是因为它是业界 sql 访问层第一个系统的采用 ActiveRecord 模型和采用链式调用注入 sql 查询条件的工具,这个比当时的 ORM 思想要先进,简单,灵活的多。当时很多人说 ruby on rail 开发效率高,其实就是指的这个它这个 SQL 访问层相比当时以 Hibernate 为代表的 ORM 傻大笨粗要好用的多。

    但是就像历史上最先搞模式匹配(正则表达式)的语言 perl 一样,在火了一段时间后,被其它语言广泛学习,这个 ActiveRecord 和链式调用的 sql 查询工具设计方式被其它的语言和框架学过去了,于是这个框架就泯然众人矣了。因为 ruby 实在不是什么大众型的语言
    ai277014717
        2
    ai277014717  
       2020-11-11 12:23:13 +08:00   ❤️ 1
    复杂的是 webpack 和 ruby,rails 关系不大。
    robertlyc
        3
    robertlyc  
       2020-11-11 12:23:36 +08:00   ❤️ 10
    人菜不要怪框架
    renyijiu
        4
    renyijiu  
       2020-11-11 12:26:29 +08:00   ❤️ 1
    看着大部分都是前端相关的报错,你可以试试 api 模式,你说 go 没遇到过也不是 go 服务端,没有前端的信息
    coool
        5
    coool  
    OP
       2020-11-11 12:28:00 +08:00
    @abcbuzhiming 我只会写 Go,虽然在做后端开发的工作,但是感觉很多东西不懂,学 ruby 确实是希望可以开阔眼界、学习到更有沉淀性的思想、高屋建瓴。

    其实看 Ruby 的语法很不适应,参数怎么传都可以,还可以有默认值,关键字,但是硬着头皮看了一星期,开始看 rails,一个 demo 处处碰壁,之前也从来没碰到这种挫折,很灰心。
    coool
        6
    coool  
    OP
       2020-11-11 12:29:02 +08:00
    打算换 python 了。
    ppphp
        7
    ppphp  
       2020-11-11 12:30:43 +08:00
    我一般只用 rails new --api
    guokeke
        8
    guokeke  
       2020-11-11 12:34:41 +08:00 via Android   ❤️ 7
    本来以为你是黑 Ruby,但是看完后。。你不对劲(
    cmdOptionKana
        9
    cmdOptionKana  
       2020-11-11 12:39:51 +08:00
    @coool python 与 ruby 一样都是动态语言,你说 “看 Ruby 的语法很不适应,参数怎么传都可以”,python 也是一样的。

    其实你继续用 go 就好,转 python 干嘛… 在 web 方面 python 不见得比 go 好。如果搞 web,你转 php 或 java 都比转 python 好。
    polythene
        10
    polythene  
       2020-11-11 12:43:36 +08:00   ❤️ 2
    老哥,看报错,这锅应该是前端背,rails 表示很冤,你是真看不出来?
    Numbcoder
        11
    Numbcoder  
       2020-11-11 12:51:13 +08:00   ❤️ 1
    明明是你搞不明白 webpack,为什么让 Rails 来背锅?
    no1xsyzy
        12
    no1xsyzy  
       2020-11-11 12:56:50 +08:00
    Python 传参还能 *args 或者 **kwargs 呢
    迭代下来 Python 传参比 Ruby 更自由
    zjsxwc
        13
    zjsxwc  
       2020-11-11 12:59:15 +08:00   ❤️ 1
    js:怎么看起来像是我 webpack 的锅
    est
        14
    est  
       2020-11-11 13:00:36 +08:00 via Android
    我就说一条,很多小白吹捧的 ruby 语言牛逼特性其实是 activesupport 提供的。
    wei745359223
        15
    wei745359223  
       2020-11-11 13:00:55 +08:00
    需要 nodejs 和 yarn
    然后在目录下 yarn install 一下
    arischow
        16
    arischow  
       2020-11-11 13:01:28 +08:00 via iPhone
    啥也不是
    calpes
        17
    calpes  
       2020-11-11 13:04:10 +08:00
    第一,你可以试试 api mode,这些错看起来基本都是 js 的错误,绕过之后可能会简单很多,毕竟看起来你也不会搞前端工程
    第二,Ruby 这个语言就是这样,爱他的人为了他的灵活自由而着迷,恨他的人其实最适合用 Python
    第三,我觉得对你来说转 Python 是正确的道路
    calpes
        18
    calpes  
       2020-11-11 13:05:40 +08:00   ❤️ 1
    @est activesupport 难道不是 Ruby 写的吗?没有体现 Ruby 语言的牛逼特性吗?
    est
        19
    est  
       2020-11-11 13:08:52 +08:00 via Android
    @calpes 道理是你这个道理,但是滥用第三方包弥补语言的不足,很容易导致楼主帖子这种新手无能狂怒。最终的后果就是这门语言增量越来越少,只能吃存量市场。
    coool
        20
    coool  
    OP
       2020-11-11 13:09:27 +08:00
    @cmdOptionKana 只会一门语言就很慌,得学个脚本语言傍身
    litujin1123
        21
    litujin1123  
       2020-11-11 13:09:48 +08:00
    关注一下前端就知道,招聘还出现过 webpack 工程师,所以怪到 ruby 头上?
    rrfeng
        22
    rrfeng  
       2020-11-11 13:12:09 +08:00 via Android
    Ruby 哪有什么牛逼特性……Rails 是个牛逼框架罢了。
    coool
        23
    coool  
    OP
       2020-11-11 13:12:51 +08:00
    @polythene @Numbcoder 这虽然是前端的问题,但难道不是 rails 里集成的 webpack 么?如果学 rails 不能避开这个,那难道不应该归结到“学 rails 中的挫折”么?
    ericguo
        24
    ericguo  
       2020-11-11 13:14:37 +08:00   ❤️ 4
    看了楼主的帖子,我下定了决心,放弃 Go,转 Phoenix/Elixir !
    love
        25
    love  
       2020-11-11 13:15:07 +08:00
    这都过气多少年了。。。
    另外 ruby 这个语言真是一言难尽
    Mark24
        26
    Mark24  
       2020-11-11 13:15:15 +08:00   ❤️ 1
    webpack-dev-server 报错的,那是 webpack 复杂

    跟 rails 有啥关系

    前端的东西,作为前端自己都觉得复杂。东西太多,轮子太多。天朝网络不好,各种暗坑。

    平心而论,rails 十分具有服务精神,喂到嘴巴里。不要太棒。。。
    liprais
        27
    liprais  
       2020-11-11 13:15:36 +08:00   ❤️ 3
    @rrfeng 你听说过 method_missing 么......
    ppphp
        28
    ppphp  
       2020-11-11 13:16:56 +08:00
    不过话说回来,rails 确实很难学的,经常因为一些功能抽象程度太高而不容易搞懂
    yaphets666
        29
    yaphets666  
       2020-11-11 13:17:39 +08:00
    前端是有 package.json.lock 这个文件的 能锁死包的版本号 你这个工程里没有吗 没有的话这不能怪前端
    yaphets666
        30
    yaphets666  
       2020-11-11 13:18:11 +08:00
    @yaphets666 package-lock.json
    ace12
        31
    ace12  
       2020-11-11 13:18:45 +08:00 via Android
    @ericguo 以后再也不愁找得到工作啦
    no1xsyzy
        32
    no1xsyzy  
       2020-11-11 13:20:34 +08:00   ❤️ 3
    你这里的问题都是 webpack 的问题,webpack 我自己也都解决不了(

    一个别人放弃的项目重构为模块化,webpack 我弄了半天搞不清,rollup 输出 iife 一遍过(不涉及模块基本就是 cat ),然后修修补补修修补补每次都是稍微动一点点动一点点,输出也看得出对应地一点点一点点地动,很清晰。
    reus
        33
    reus  
       2020-11-11 13:23:19 +08:00   ❤️ 1
    十年前接触过一下,当时前端也没有这些东西,都是服务器端输出 html 完事
    后来就是前后端分离的时代了,其他框架就专注于做 api 服务器了
    rails 不是,它既要坚持服务端渲染,又要拥抱现代 js 生态,于是就把 webpack 这类 js 工具链引入了 rails 里面
    这是个绝对的败笔,js 生态是相当不成熟的,是相当混乱的,即使是 webpack 这类基础工具,版本之间根本没有兼容性可言
    于是就出现楼主这样的遭遇了
    现在的大势就是,后端就做后端,前端就做前端,前后端通吃的 web 开发,已经是移动互联网成为主流前的老古董了
    确实不值一学
    coool
        34
    coool  
    OP
       2020-11-11 13:24:37 +08:00
    @reus 有道理,醍醐灌顶
    Wincer
        35
    Wincer  
       2020-11-11 13:26:32 +08:00 via Android
    @ericguo #24 Phoenix 也有 webpack 。。(🐶
    lidashuang
        36
    lidashuang  
       2020-11-11 13:27:57 +08:00
    不要学 go,太几把难用了
    Rwing
        37
    Rwing  
       2020-11-11 13:28:24 +08:00
    不是,没人提及 C#吗?
    songtinhuang
        38
    songtinhuang  
       2020-11-11 13:29:31 +08:00   ❤️ 1
    看了楼主的贴子,我下定了决心,拥抱微软 Asb .NOT Care 5 。
    Lax
        39
    Lax  
       2020-11-11 13:29:51 +08:00
    现在学习 ruby 的前置条件是:认证 webpack 配置工程师
    atpking
        40
    atpking  
       2020-11-11 13:30:46 +08:00
    @ericguo 我是来围观的 😆
    PqZS58MLPBHFpEqm
        41
    PqZS58MLPBHFpEqm  
       2020-11-11 13:31:44 +08:00
    Ruby on Rail 的职位太少了,抛开语言本身,社区和工作也是重要原因。
    Wincer
        42
    Wincer  
       2020-11-11 13:35:59 +08:00 via Android
    前两年在用 webpack 的时候,想把一个 version 3 的配置文件升级到 version 4,折腾了挺久愣是没弄好,一怒之下直接不用 webpack 了。前段时间又需要用到打包工具的时候直接选择了 rollup,太香了,秒杀 webpack 。
    dddd1919
        43
    dddd1919  
       2020-11-11 13:38:39 +08:00
    学习 rails 最好还是 5.x 版本,我从 2.x 用到 5.x,其实上手还是非常友好,rails new demo 后可以直接启动,新手提供的脚手架命令生成的路由文件等等都非常规范,在你不知其所以然的情况下帮你做了很多东西。

    不过现在把 webpack 这么个大物件集成到 rails 里,感觉不太合适,webpack 本身跟 rails 没半毛钱关系,加入进来无非还是全栈式开发的那套路子,想一人通吃,自己感觉对新手已然非常不友好了
    XIVN1987
        44
    XIVN1987  
       2020-11-11 13:39:10 +08:00
    看来不碰前端( webpack 、nodejs )是正确的。。
    lidashuang
        45
    lidashuang  
       2020-11-11 13:46:38 +08:00
    老哥,可以不用 webpack 的
    dddd1919
        46
    dddd1919  
       2020-11-11 13:47:35 +08:00
    另外学习 rails 的话建议看 ruby on rails tutorial 前面的版本(比如第 4 版)
    putaozhenhaochi
        47
    putaozhenhaochi  
       2020-11-11 13:48:20 +08:00
    天下苦 webpack 久矣
    coool
        48
    coool  
    OP
       2020-11-11 13:49:28 +08:00
    @dddd1919 你说的有道理,但是以后你的 rails 升级不还是绕不开这些么?到时候也还是坑……
    agagega
        49
    agagega  
       2020-11-11 13:49:31 +08:00
    首先这个问题其实是因为 Rails 集成了 Webpack 带来的。我个人觉得 Rails 把前端这堆东西集成进来是为了融入潮流,但很多搞 Rails 的人,其实对前端技术都保有保守的态度( Turbolinks 这种东西看起来落后了吧?但它也 just works )。所以这么搞,徒增了不少复杂度...

    楼主可以试试 API mode,应该就没这么多烦恼了。遥想我当年学 Rails 的时候,还是 4.x 版本,在 Mac 上有个 v8 的包死活装不上,试了好久都快放弃了。最后用 rbenv 在用户目录下装了个 Ruby 搞定。配环境这种事没有最难受只有更难受。

    另外我依然觉得,Ruby 的坑在国内太少,可以慎入。但 Rails 真的值得一学。很多理念、实现、方法论在 2020 依然对 Web 开发者有价值和启发。

    另外,Ruby China 好像是很久没有活人了...
    dsh0416
        50
    dsh0416  
       2020-11-11 13:51:32 +08:00   ❤️ 1
    虽然看了一下全是 webpack 故障导致不能用,但这也确实是个问题。

    如果不打算用 Webpack 可以初始化脚手架就跳过 Webpack 。Rails 调用 Node 去搞一些东西确实事情比较多。而且 Rails 默认用 yarn,有的时候一些 JavaScript 的依赖的 post-script 又会调用 npm,然后两个 lock 不匹配或者什么二进制编译失败了,再让整个 node_modules 出问题。而在 Rails 这端给出的抛错又不太能正确反应这是 Node.js 的问题。再加上如果是在中国 npm 服务器访问本来就很不稳定,如果没有预先设置过镜像很可能依赖安装不上,抛错也会变得比较诡异。像这些事情洋书教程肯定是不会提及的。

    Rails 默认的脚手架是按照一个大型全栈项目来配置的,以减少配置时间。对于小的项目、非全栈项目或者想要摸清楚的 rails 内部工作原理的新手确实可以从比较小的初始化开始。比如如果只是想要 API 服务器的话就更简单了,直接 `rails new demo --api` 就行了
    ashine
        51
    ashine  
       2020-11-11 13:52:18 +08:00
    都是 webpack 的锅,把前端的纯粹性搞得一团乱
    marcong95
        52
    marcong95  
       2020-11-11 13:59:19 +08:00
    大家可能黑前端黑习惯了,我来帮 webpack 洗一下

    错是 webpack-dev-server 报的不假,但是为啥 rails 要把 webpack 这种这么复杂的东西搞进去,我也是很不解的

    你要是想折腾 webpack 这种东西,不见得 vue-cli 或者 create-react-app 会至于让你连 demo 都跑不起来,网络问题另说
    cmdOptionKana
        53
    cmdOptionKana  
       2020-11-11 14:04:22 +08:00
    @coool 如果是学个脚本语言傍身,学 python 也很不错,但建议不要学 python 建站,而是学运维、数据处理、AI 之类的,专注于 python 的优势领域。
    manami
        54
    manami  
       2020-11-11 14:08:04 +08:00   ❤️ 1
    《松本行弘的程序世界》
    hoyixi
        55
    hoyixi  
       2020-11-11 14:09:38 +08:00
    RoR,是的,你得懂前端。

    前端生态杂乱多,都讲是给开发人员提供了好的工具链,结果同时也是给自己挖的大坑。
    chloerei
        56
    chloerei  
       2020-11-11 14:14:18 +08:00   ❤️ 7
    看了上一帖子,估计是 npm 包没装全。

    建议全局科学上网,用官方源避免问题复杂化,到项目目录运行一次 bin/setup 确保依赖都装好了。

    国外社区确实不了解 gem npm 安装包的时候卡住怎么办,我看他们的教学视频都是瞬间装好……

    所以楼主的问题归根结底是网络问题。

    ---

    关于 Webpacker,我也认为 Rails 6 把 webpacker 作为默认是个风险,只能说是迫不得已。Rails 自己的 Sprockets 才是完美符合自己需求的前端打包器,在以前也运行良好。但是 node 社区发展了自己的打包规范( AMD , CMD, CommonJS,ES Module,UMD……),新的包也用这些规范打包,如果不用 js 生态的打包器是无法跟上前端的 speed 的,那么就加载不了最新的库。

    Webpack 其实跟 Rails 的需求不太符合,Rails 需要的是前端打包器,把静态文件打包好放在 public 目录就好了。而 webpack 是应用打包器,除了编译以外它还希望管理整个应用的加载方式,这就产生了一些别扭的操作:编译 css 并不是 scss -> css,而是 scss -> js -> css,搞得配置文件无比复杂。相信很多用惯 Sprockets 的人初上手 webpacker 都搞不清楚那个目录结构是怎么回事。

    很难说 Webpacker 以后会怎么样,现在 Rails 6.0 默认存在两个静态文件打包器比较别扭。Webpacker 已经对 Webpack 进行预配置简化了,跟着好的教程走应该也能走通才对,相信也不会对 Webpack 着墨太多。

    ---

    前后端分离问题我以前写过一篇博客,相同的内容不再陈述 https://chloerei.com/2018/01/07/front-end-split/

    如果是小团队,从开发效率出发我还是会选择 Rails 集成式开发。
    marco
        57
    marco  
       2020-11-11 14:18:10 +08:00
    这不是 Rails 本身的问题。你可以试试: https://www.vagrantup.com/
    pynix
        58
    pynix  
       2020-11-11 14:18:38 +08:00
    新手阵痛。。
    duan602728596
        59
    duan602728596  
       2020-11-11 14:34:30 +08:00   ❤️ 1
    除了`bin/webpack-dev-server`的错误(这个错误是 webpack-dev-server 的 v4 版本没有开发完,不支持 webpack-cli 的 v4 版本导致的),剩下的 webpack 不背锅。集成是 rails 该做好的,rails 没搞好,就把锅甩到前端、甩到 node 、甩到 webpack 这来了?
    至于兼容性的,webpack 从 v3 到 v5 以后,配置项就没有多大的变化,照着 changelog 、迁移指南改一改就行。不想改的 package.json 锁版本也没人拦着啊。至于说改了一大堆 api 的,那是 loader 和 plugin 的开发者需要关心的事情。
    run27017
        60
    run27017  
       2020-11-11 14:41:00 +08:00 via iPhone
    rails 是一个全栈框架,全栈框架的意思是你既要懂前端也要懂后端
    radiocontroller
        61
    radiocontroller  
       2020-11-11 14:46:31 +08:00
    不要用 webpack,创建项目时跳过,先跑起来,再考虑 webpack 的事
    keepeye
        62
    keepeye  
       2020-11-11 14:53:30 +08:00
    学它作甚,还不如搞 rust 有成就感
    dddd1919
        63
    dddd1919  
       2020-11-11 15:09:05 +08:00
    @coool 从 rails2 一路升级到 rails5,其实升级最大的动力还是想看看性能的优化,代码本身很多功能是依赖第三方 gem 或配合其他组件使用,也没有非得升级的必要,现在如果再用 rails 开发的话,还是会选 rails5,没有页面直接用 rails-api

    我觉得 rails 的优势还是作为传统的 web server,提供了一套全栈开发的标准框架,包括数据库封装的 ORM,前端资源管理的 pipeline,安全的处理,方便的部署,还有 rake,在 rails 本身花很少的精力,可以更多的去研究前端,数据库,缓存等等,让新手也能快速开发出安全稳定的服务,而且其他语言的很多 web 框架都是借鉴 rails,值不值呢?反正我觉得超值
    HUAXIA
        64
    HUAXIA  
       2020-11-11 15:21:12 +08:00
    这是一个我看不懂的帖子,蕾姆了
    run27017
        65
    run27017  
       2020-11-11 15:29:20 +08:00   ❤️ 1
    rails 主要的优势是全栈和中间件。全栈目前的开发环境没有必要了,基本是前后端分离,所以 `rails new --api` 模式在很多场合是很有必要的。但是既然用 API 模式了,何不尝试纯 API 框架?我现在的主要开发框架已经迁移到 Grape 了,纯 API 的手感在某种程度上比 Rails 更好。

    rails 的另一个优势是中间件,这是 rails 提供给社区的赠品。基本 rails 的所有模块都可以拆下来单独使用,所以 grape 配合上 active-record 就带来了别样的开发体验。为此,我专门写了一套脚手架,脚手架内集成了必要的中间件和配置,方便我在任何时候开启新的项目:

    > https://gitee.com/run27017/generator-grape-app.git
    yanyuanfe
        66
    yanyuanfe  
       2020-11-11 15:30:47 +08:00
    webpack5 的报错,最近遇到过,启动命令改成:webpack-cli serve, 不要使用 webpack-dev-server 启动
    bonfy
        67
    bonfy  
       2020-11-11 15:47:11 +08:00
    所以楼主真的会 Go 么?
    memorycancel
        68
    memorycancel  
       2020-11-11 15:54:00 +08:00
    。。。。。。
    hooopo
        69
    hooopo  
       2020-11-11 16:08:47 +08:00   ❤️ 4
    xx 我学不会 != xx 不值得一学
    JmmBite
        70
    JmmBite  
       2020-11-11 16:15:07 +08:00
    在 ruby27 docker 里把 rails3~6 都安装了一遍测试了一下基本没啥,rails6 需要安装 webpack,依据带宽延迟因素时间会比较长。( rails1~2 改动太大,要支持 ruby27 须要修改的地方太多就放弃了)

    开发用 docker 还是很方便的。
    luoleng
        71
    luoleng  
       2020-11-11 16:18:24 +08:00
    我觉得每种语言、存在即合理、可能是你没 get 到它的用处吧
    namelosw
        72
    namelosw  
       2020-11-11 16:20:18 +08:00   ❤️ 3
    《 Go 不值一学》: 用 Bash 啥也不用装, 不比 Go 强多了.

    > “如果一项编程语言的入门,大量时间要花到折腾环境、各种乱七八糟的报错上而无法聚焦到语言、框架本身,那还谈什么提高?”

    为啥聚焦到语言, 框架? 不是应该聚焦到业务嘛?

    说到聚焦业务, 我理解 Rails 比 Go 和其他技术栈强百倍. 大部分项目写 Web 都会写很多和业务无关代码, Go 就是个典型例子. 比如搞邮件, 搞缓存, 搞 Queue, 搞静态化, 搞文件存储, 搞 Channel, 搞 Migration, 然后给这些东西写测试. Rails 第一天就有生产力, 有完整的文档, 有精心设计的 API, 升级有 migration 文档, 相比之下大部分项目做这些最常见的东西都会有一坨一坨的垃圾代码, 每个项目还都不一样, 然后在接下来的几年一直折磨项目上的人.

    > 折腾了 3 天准备放弃了,真的不值一学。

    很多值得学的东西受众没有那么广, 搭环境困难很常见, 最常见的 perlis language 比如 Haskell, 比 Ruby 啥的麻烦多了, 不影响它本身很值得学.

    你说的上手问题确实存在, 但是卡 3 天的话…… Google 和 Stackoverflow 的技能都不够, 感觉你的高度可能还不够 judge Rails 值不值得学.
    jimrok
        73
    jimrok  
       2020-11-11 17:12:38 +08:00
    Ruby 的学习曲线非常陡,上去了之后还是有些乐趣的,但我觉得 ruby 的虚拟机一直搞不好,又没有找到合适的领域,未来堪忧。
    qiumaoyuan
        74
    qiumaoyuan  
       2020-11-11 17:37:24 +08:00
    业余想多学一门语言,Rails 这情况不是挺合适的嘛?解决问题的过程中能掌握不少东西。

    反而要是只为了快速掌握,马上能用而学,倒是更适合找一个能更快上手的,因为急着用。

    说实话国内 Ruby 社区现在挺需要新人的,多一些新鲜血液是好事,大家还是尽量不要打击新人,多给些耐心吧。
    tlday
        75
    tlday  
       2020-11-11 17:43:47 +08:00
    2020 年了,标题我赞同,内容没黑到点子上
    rainfd
        76
    rainfd  
       2020-11-11 18:26:54 +08:00
    Rails 用 webpack 确实有问题,但你都知道是 webpack 的问题了,想办法把这个问题绕过这个思路你总得试试吧。
    nonduality
        77
    nonduality  
       2020-11-11 19:00:09 +08:00
    建议你学 Python 和 Django,Django 版本升级很平滑,生态也繁荣得多,Python 还可以做点别的。

    此外,Ruby 语言确实是有小日本的恶趣味,别的不说,函数调用的括号都可以省略,对于喜欢的人来说叫做灵活、随心所欲,对不喜欢的人来说叫做制造不规范和增加认知消耗。
    jasl
        78
    jasl  
       2020-11-11 20:43:48 +08:00   ❤️ 1
    @reus
    1 虽然当下前短后端有了更清晰的职业分工,但是前端不懂后端,后端不懂前端,这是不能够称作合格的工程师的
    2 前后端通吃(所谓的全栈)的 web 开发框架仍然是主流,不信你可以数数各语言当下流行的 web 框架,当然这些框架通常也提供了 API mode (当然 Rails 4 年前就有了),这个对 web 服务本质有了解的,应该能明白这是是一个噱头,
    当然了,实际上 Rails 对于 GraphQL 这种的新 API 技术的支持仅弱于 JS
    3 作为全栈开发框架,引入 Webpack 并不是败笔,因为这是前端目前的事实标准,此外,Laravel 之类的其他语言的 Web 框架也都跟随了这个做法,如果是败笔,怎么解释这种跟随行为呢?
    4 移动互联网只是互联网的一小部分,大量的业务系统(特别是 ToB 的复杂的信息系统),使用传统后端渲染依旧是主流
    5 Rails 的优点是他提供的功能、Ruby 的表达能力、多年积累的生态,可以帮助团队(特别是小型团队)快速实现业务,当然在国内大肆推崇 996 氛围来说不值一提,但是如果计算成本,Rails 的性价比是惊人的
    6 虽然说 Rails 老古董,但新的框架出来,总是不得不要跟 Rails 比一比功能,这就很有意思了

    或许一个面试十四年的技术不 cool 了,但我并不觉得他在哪里是过时的
    jasl
        79
    jasl  
       2020-11-11 20:45:16 +08:00
    @jimrok
    Ruby 2.2 大概在 2014 年,性能就已经超越 CPython 了,缺少 Web 外的场景比较要命,但是虚拟机的开发上,Ruby 的开发团队比 Python 要进取很多的
    vus520
        80
    vus520  
       2020-11-11 21:07:17 +08:00
    什么,ROR 还没凉?
    whoami9894
        81
    whoami9894  
       2020-11-11 21:37:26 +08:00
    你是来黑 Go 的吧
    ben1024
        82
    ben1024  
       2020-11-11 21:47:09 +08:00   ❤️ 1
    试试 PHP 的 Laravel 就是照着 ROR 来的框架
    hakono
        83
    hakono  
       2020-11-11 21:57:49 +08:00
    路过抱怨下,曾经突然被公司扔来一个项目,维护公司年会抽奖的 api 服务
    ruby 写的,改这个服务是我最痛苦的一次经历
    angryfish
        84
    angryfish  
       2020-11-11 21:59:18 +08:00 via iPhone
    看得出楼主缺少前端工程化知识。我真诚建议,楼主学 nodejs,以及前端,然后来个 web 全干。
    oaking
        85
    oaking  
       2020-11-11 22:56:51 +08:00
    @chloerei 学校刚毕业时就经常看到你在 Ruby China 的解答,专家级别的大佬。
    mxalbert1996
        86
    mxalbert1996  
       2020-11-11 23:04:02 +08:00 via Android   ❤️ 1
    @cmdOptionKana Ruby 语法比 Python 自由太多了,Python 哪怕是没学过的人只要会编程应该都能大致看懂程序,Ruby 我读了 tutorial 很多语法还是很难看懂。
    begoingtodo
        87
    begoingtodo  
       2020-11-11 23:10:37 +08:00
    关前端啥事,前端开发非 webpack 不可?
    wangkun025
        88
    wangkun025  
       2020-11-11 23:36:18 +08:00
    炸出好多 Ruby 大佬。
    我是跪着看帖的。
    gamesover
        89
    gamesover  
       2020-11-12 00:38:23 +08:00
    @bonfy 有可能,他大概只会写后端的东西
    gamesover
        90
    gamesover  
       2020-11-12 00:43:19 +08:00
    ror 现在的确已经非主流了
    但看了楼主的问题,很明显是楼主不懂 yarn,webpack 等前端技术造成的
    大概楼主以前的工作很少接触前端
    046569
        91
    046569  
       2020-11-12 01:21:23 +08:00   ❤️ 2
    为了验证 LZ 的说法,我在一台未安装 Ruby on Rails 的 iMac 上执行全新安装,记录过程和时间:

    1. 系统版本是 macOS 10.15.7,提前安装了 ruby 2.7.2p137 .
    2. 关闭代理,模拟普通用户,安装截图中可以看到由于网络问题,不停的重试链接,影响了安装速度.
    3. 实际安装时间约 20 分钟.
    4. 首次创建项目会提示"Yarn not installed."和"run rails webpacker:install".按照提示安装即可,不需要了解 yarn 或者 webpacker.
    5. 使用 Ruby-China 的 gems 镜像.
    6. 个人猜测 LZ 看的书 Rails 版本落后了,所以照葫芦画瓢没能安装成功.

    https://imgur.com/V0VqwDm

    附上我的安装命令供参考:

    ```
    gem install rails
    brew install yarn
    rails new demo
    rails g controller Say hello goodbye
    rails webpacker:install(注意检查这条命令执行了吗?)
    rails s
    ```
    046569
        92
    046569  
       2020-11-12 01:30:08 +08:00   ❤️ 1
    补图:





    欢迎加入 Ruby & Rails 大家庭.
    ConradG
        93
    ConradG  
       2020-11-12 01:59:16 +08:00   ❤️ 1
    @nonduality
    这个绝对不算恶趣味。它并不是一个语法糖,而是 Ruby 元编程特性的一个表现。利用可以不加括号这个特性,Ruby 可以写出很漂亮的给非码农使用的 DSL,这是其他主流语言几乎都不具备的一个特性。
    laike9m
        94
    laike9m  
       2020-11-12 01:59:28 +08:00 via Android
    前端就是这样的,工具链问题太多,尤其对不熟悉这块的后端程序员来说无异于黑盒
    limon
        95
    limon  
       2020-11-12 02:35:39 +08:00
    js 、webpack 都是 web 主流技术你真的不打算精通下么?你换其他全栈框架一样绕不开的。
    不想学就继续大道至简,不要自找麻烦了。
    msg7086
        96
    msg7086  
       2020-11-12 02:47:27 +08:00 via Android
    连 webpack 是 JavaScript 都不知道就来说 rails,不知道是该说菜还是该是坏。
    不过也好,不管是菜是坏,别来学 rails 了,免得以后咱们招人的时候招到什么奇怪的东西。
    jasl
        97
    jasl  
       2020-11-12 02:53:00 +08:00   ❤️ 6
    说来年初我回复过一篇也是学习 Rails 过程中退却的 [ [从初学到放弃] Ruby On Rails]( https://zhuanlan.zhihu.com/p/103633703)

    在看这个帖子,我感觉有工作经验的同学基础知识不牢靠的还是挺多的(这里有点得罪人),Rails 的很多特性( MVC 模式、ORM 、视图渲染等等)在今天并不新颖,但是反而有过一定工作经验的朋友无法很好的把自己掌握的知识映射上来,甚至对相同的概念认知上出现偏差,这个真的是个人的问题。

    典型的,现在提倡前后端分离 -> Rails 过时,这完全是没有因果关系的,HTML 是视图,JSON 何尝不也是视图呢?甚至 Protobuf 、GraphQL 也都是视图呀,所以当你不需要做 SSR 的时候,要做 API 的时候,`render json: {}` 就好了呀,甚至我可以说 Rails 在这里比任何其他语言都先进呢,因为 Rails 把渲染抽象成了 `responder` 也就是说,你想返回什么,只要设计好对应格式的视图就行了,甚至你愿意,客户端想请求什么格式,Rails 可以自动按需返回。
    这个可实用了,比如做个类似 V2EX 的论坛,那时候流行 RSS 阅读器,你可以做到浏览器访问一个 url,返回 HTML,阅读器访问,返回 ATOM,当然要做客户端的话,同样的 URL 还能返回 JSON,这其实很大程度复用了业务逻辑代码。

    Rails 的理念在现在仍然先进,比如用自定义小型路由语言来解决 URL 路由匹配(将 URL 抽象成一种类似正则的语言),用 AST 来抽象 SQL 查询,这些理念仍然是极其先进的。

    只是由于前后端分离等新的工作方式,Rails 提供的很多功能的重要性降低,但这仍然不代表 Rails 过时,事实也证明了历史是螺旋上升的,“后端语言” 逐步放弃的后端渲染,又被 JS 框架捡了起来,重新包装成什么 PreRender...

    我觉得楼主的戾气有点太重了,事情并不是你想象的那样子。
    Andor_Chen
        98
    Andor_Chen  
       2020-11-12 08:33:57 +08:00   ❤️ 1
    是你书没选对,学 Rails 还是要看《 Ruby on Rails 教程》( https://flapybooks.com/products/railstutorial6th )。

    利益相关:《 Agile Web Development with Rails 5 》和《 Ruby on Rails Tutorial 》中文版译者。
    66beta
        99
    66beta  
       2020-11-12 08:34:57 +08:00 via Android
    webpack 太新了也,rails 这样对新手确实不友好。
    Leigg
        100
    Leigg  
       2020-11-12 09:02:51 +08:00 via iPhone
    啊,ruby 得懂前端?劝退了…
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1559 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 17:00 · PVG 01:00 · LAX 09:00 · JFK 12:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.