Ruby, Rails 不值一学

2020-11-11 12:12:49 +08:00
coool  coool

这是前两天开的帖: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,历数我遇到的各种奇怪的报错,完全没有任何解决方案:

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 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 天,反正我这三天,每天十几个小时的折腾这些报错已经耗尽了耐心,放弃了。

13059 次点击
所在节点    Ruby on Rails
166 条回复
PqZS58MLPBHFpEqm
2020-11-11 13:31:44 +08:00
Ruby on Rail 的职位太少了,抛开语言本身,社区和工作也是重要原因。
Wincer
2020-11-11 13:35:59 +08:00
前两年在用 webpack 的时候,想把一个 version 3 的配置文件升级到 version 4,折腾了挺久愣是没弄好,一怒之下直接不用 webpack 了。前段时间又需要用到打包工具的时候直接选择了 rollup,太香了,秒杀 webpack 。
dddd1919
2020-11-11 13:38:39 +08:00
学习 rails 最好还是 5.x 版本,我从 2.x 用到 5.x,其实上手还是非常友好,rails new demo 后可以直接启动,新手提供的脚手架命令生成的路由文件等等都非常规范,在你不知其所以然的情况下帮你做了很多东西。

不过现在把 webpack 这么个大物件集成到 rails 里,感觉不太合适,webpack 本身跟 rails 没半毛钱关系,加入进来无非还是全栈式开发的那套路子,想一人通吃,自己感觉对新手已然非常不友好了
XIVN1987
2020-11-11 13:39:10 +08:00
看来不碰前端( webpack 、nodejs )是正确的。。
lidashuang
2020-11-11 13:46:38 +08:00
老哥,可以不用 webpack 的
dddd1919
2020-11-11 13:47:35 +08:00
另外学习 rails 的话建议看 ruby on rails tutorial 前面的版本(比如第 4 版)
putaozhenhaochi
2020-11-11 13:48:20 +08:00
天下苦 webpack 久矣
coool
2020-11-11 13:49:28 +08:00
@dddd1919 你说的有道理,但是以后你的 rails 升级不还是绕不开这些么?到时候也还是坑……
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
2020-11-11 13:51:32 +08:00
虽然看了一下全是 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
2020-11-11 13:52:18 +08:00
都是 webpack 的锅,把前端的纯粹性搞得一团乱
marcong95
2020-11-11 13:59:19 +08:00
大家可能黑前端黑习惯了,我来帮 webpack 洗一下

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

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

前端生态杂乱多,都讲是给开发人员提供了好的工具链,结果同时也是给自己挖的大坑。
chloerei
2020-11-11 14:14:18 +08:00
看了上一帖子,估计是 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
2020-11-11 14:18:10 +08:00
这不是 Rails 本身的问题。你可以试试: https://www.vagrantup.com/
pynix
2020-11-11 14:18:38 +08:00
新手阵痛。。
duan602728596
2020-11-11 14:34:30 +08:00
除了`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
2020-11-11 14:41:00 +08:00
rails 是一个全栈框架,全栈框架的意思是你既要懂前端也要懂后端

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/723965

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX