访问被拒绝,你可能没有权限或未登录。

分享 使用 Windows 10 + WSL 进行无缝 Ruby 开发

nine · 2019年05月09日 · 最后由 jelly-g 回复于 2023年12月06日 · 15743 次阅读
本帖已被管理员设置为精华贴

最近使用 Windows 10 比较多,越来越觉得 Mac 的 GUI 是上个世纪的产物了,所以一直在琢磨要不要在 Win 上搞 Ruby。刚巧,本月微软公布了 3 个讨好 Linux/Unix 开发者的产品/功能。

  1. Windows Subsystem for Linux 2 ( WSL2 ) ,预期年底发布。
  2. Windows Terminal ,预期年底发布,现在可以自行编译(功能没有视频上的牛 X)。
  3. VSCode Remote ,VS 的插件,现在可以安装。

其中 VSCode Remote 是一组插件,由 3 个插件组成

  1. Remote SSH
  2. Remote Containers
  3. Remote WSL

具体介绍可以看 VS Code Remote 发布!开启远程开发新时代

于是尝试了一把 Win 下开发。之前也 try 了一下虚拟机方案,感觉不是我想要的,而且挂载系统有 bug。看到新闻后,想起来之前同事在 2017 年就使用 WSL 了,而且在我们公司的实际项目中使用了大半年,并没有什么不妥。

WSL

在 Windows 上运行的 Linux,和虚拟机不同,WSL 和宿主 Windows 是几乎无缝的。

有很多发行版可以用,我选择的是 Ubuntu,WSL 2 还早,目前可安装的 WSL 1 完全可以胜任(如何安装?在 Microsoft Store 里点击安装,网上有图文详细教程,可自行 Google)

Windows Terminal

编译过程比较麻烦,我没有编译成功,用网友编译好的版本,提示证书问题,装不上。后来按 第 45 期 Windows Terminal 微软新版终端工具安装教程 的步骤,把证书搞定,安装成功了。不过实际体验和 Hyper、ConEmu 没有什么质的差别。

附 2 个网友编译版下载地址:

https://cloud.natfrp.org/s/AaxfrxK96JebHsj

http://cdn.lr3800.52qdw.cn/Terminal.7z

VSCode Remote

VSCode 的 Remote 方案也尝试了,实际结果是没有什么卵用。

实际需要做的是

  1. 安装 WSL
  2. 使用任意终端(包括 cmd、powershell 都可以),进入工作目录,输入 wsl + 回车,即可进入 wsl 的 shell 实际的效果如下

也就是说使用任意 Windows 的编辑器/IDE 对 win 上的目录进行编码,实际代码运行在 WSL 内。rails s 后,打开 Windows 的浏览器,输入http://localhost:3000 即可访问 rails 项目。完全无缝。

其中 windows 的文件系统按盘符,自动挂载在 WSL 的“/mnt/盘符”目录下,图中的 d:\work\demo3 挂载在 /mnt/d/work/demo3 目录下。 所以也可以输入 wsl 后 cd 到 /mnt/d/work/demo3 运行 rails s

在 WSL 下可以使用 windows 命令,输入 code-insiders . 之后会自动使用 VSCode 预览版打开 wsl 的目录,并且安装 VSCode 的 Remote WSL 插件

此时新打开的 VSCode 左下角会多出一个 WSL 的图标

点击 WSL 图标会出现菜单

这个模式用于编辑 WSL 系统内文件比较方便。但是对于 Rails 开发,WSL 模式是没有什么用的,直接在 mnt 目录下编辑代码就行了。毕竟我对 WSL 的文件系统不是很放心,不想把代码放在上面。另外 WSL 的文件系统默认在 C 盘的某个目录下,还没有研究如何更改位置。

最后,说下数据库。

我这边数据库是在 win 下安装的,理由也是对 WSL 不太放心,所以此时 Rails 的 database.yml 文件需要配置上 host 和 port。不配 host 和 port 的话会默认连接 WSL 里的 unix 数据库套接字。

也就是说这套方案只有程序运行环境在 WSL 内,而程序代码、编辑器、数据库,和所有开发配套装备全部都是 windows 上的。

坑

  1. Win10 和 WSL 是两个系统使用的是不同的公钥,这点需要注意一下。
  2. WSL 系统长时间不使用会挂起,第一次做 apt-get update 的时候切到别的界面了,回来发现不动了,然后按回车之后就开始动了,不知道是挂起了还是 terminal 的 bug。
  3. 直觉上速度不是那么快,不知道和上一条是否有关。
  4. node 的 hmr 有时不太灵光,目前还不能确定是不是 WSL 的锅。

不过

  1. 台式机 CPU 总比笔记本快。
  2. 程序运行效率不是第一位,最重要的还是 GUI 对 CPU 的利用率和 GUI 软件操作的便捷性。
  3. 比起虚拟机 WSL 可以使用全部的 CPU 内核和内存。可以按 htop 看下效果(具体性能待测试)

其他:想到再补充。

适用人群

  • 对 Windows 有需求的,比如经常装机刷机,经常使用带 VBS 的 Excel,经常测试各种 CS ERP,经常使用 IE 专属系统的,经常使用 Win 专有软件的,等等……
  • 对 Mac 特性需求不强烈的,或对移动办公需求不强烈的。
  • 对 Linux/Mac 操作系统不满的。
  • 资金紧张的新手,或对 Linux/Mac 系统不熟悉的新手。
  • 资金紧张的团队,或需要大规模招募新手的团队。

顺便说下 VSCode Remote SSH 的用法。

安装插件后,按 Ctrl + Shift + P 调出菜单选择 Connect to Host 选择 Configure SSH Hosts 编辑远程服务器

编辑后点击左侧电脑图标,可以看到常用的 host,点击后可以连接到服务器

之后会打开一个新的 VSCode 窗口,左下角显示 SSH 连接标志。

之后可以编辑服务器上的文件

RemoteSSH 默认使用公钥连接,所以连接服务器之前需要安装 OpenSSH,生成公钥,然后在服务器上配置好公钥,不然就会一直连接不上。

Remote Containers

连接容器的,容器没怎么玩过,未测试,理论上应该和 Remote SSH 差不太多。

于是

SOHO 的 007 们可以在工作累了的时候无缝切换到游戏模式了。 (逃

补充,dd 测试磁盘写入 IO 基本测试

dd if=/dev/zero of=/mnt/e/test conv=fdatasync bs=1M count=1024 #1M写入性能
dd if=/dev/zero of=/mnt/e/test conv=fdatasync bs=4k count=262144   #4K写入性能

Mac 没有 fdatasync 参数,默认使用 osync,输出结果为 bytes/s

硬件环境 dd 测试路径 配置 系统 1M 写 4K 写
台式机+SSD 系统盘 /tmp/test 7700K + 32G 内存 + 960EVO 1TB WSL 870 MB/s 409 MB/s
台式机+SSD 非系统盘 /mnt/d/work/test 7700K + 32G 内存 + 960EVO 1TB WSL 963 MB/s 470 MB/s
台式 + 机械硬盘 /mnt/e/test 7700K + 32G 内存 + 西数 3T 蓝盘 WSL 132 MB/s 127 MB/s
Surface Pro4 /tmp/test I7 + 8G 内存 + 256G 硬盘 WSL 177 MB/s 105 MB/s
Macbook Pro 15 2016 /tmp/test I7 + 16G + 512SSD macOS 10.14.4 ≈340MB/s ≈570MB/s
国内某云(非阿里云)高性能磁盘 /tmp/test 2 核 4G 高性能磁盘 CentOS 7.4 266MB/s 234MB/s
国内某云(非阿里云)企业磁盘 /tmp/test 4 核 8G 企业级磁盘 CentOS 7.4 137MB/s 127MB/s
Google 云 + SSD 永久性磁盘 /tmp/test 4 核 15G SSD 永久性磁盘 CentOS 7.4 213MB/s 199MB/s
Google 云 + 标准磁盘 /tmp/test 4 核 15G 标准磁盘 CentOS 7.4 116MB/s 113MB/s

结论:

Mac 由于 dd 参数不同,结果仅供参考,不过 Mac 磁盘似乎是针对小文件优化过的,4K 写速度要快于 1M 写速度。 960EVO 仅仅 4k 写速度似乎略小于 Macbook Pro 512SSD(缺少 fdatasync 参数)。 所以担心磁盘 IO 的基本可以放心了,即使是普通的机械蓝盘,也不会差太多。

速度瓶颈,主要应该在 CPU 上,对比之前将 i7 的 MacBook Air 更新为 Macbook Pro,程序运行实际感官提升超过不止 10 倍。 (完)

請問一下最近的 WSL 支援 GPU 了嗎?

对 hong_xin 回复

目前,似乎没有,还未求证。

huacnlee 将本帖设为了精华贴。 05月10日 09:38
nine 关闭了讨论。 05月10日 09:59
nine 重新开启了讨论。 05月10日 09:59

如果真的可以这样,那么对于那些程序在 linux 运行而产品在 windows 端展示的项目时非常棒的消息啊。以后开发 ruby 门槛也可以低一些了

👍,我正好也想分享这个,最近用这个组合写 rails 一周了,比过去在 ubuntu 方便挺多

对 kxu1988 回复

可以分享哦,优缺点用了一周看样子还不错呢

我软牛逼!

目前的 WSL 还存在一个问题,在 WSL 中安装合适用 docker,实际上是 connect 到 docker for windows 中的。 前天给同事在 WSL 中运行 docker,提示 docker for windows,由于是家庭版 win10,安装不了 docker for win…… 遂放弃

对 kimmg 回复

装 win 专业版 emmm

对 kimmg 回复

我的也是家庭版,下载专业工作站版 ISO,双击打开,直接升级。完成后默认激活状态。若是没有激活,淘宝有 30 块钱电话激活。

真是赶上好时候了,节前刚入了一台小米 pro,i7 4 核 16G 才不到 7k,环比之下同配置的 mbp 要贵 10k。经过一段时间的适应发现,现在的 win10 和原来的 win xp 真是不一样了,对开发者很友好。

  • RubyMine 自带 WSL 支持
  • cmder + zsh 接近 iTerm 的体验
  • 多桌面真的很舒服,触摸板也很赞

现在跑卡夫卡都不卡了!

对 nine 回复

謝謝,半年前想用 WSL 跑一個依賴 tensorflow-gpu 的 web service 搭配 Rails 使用,研究很久發現還沒支援 GPU,只好退回正常安裝的 Ubuntu。 WSL 用起來很方便,希望未來能夠支援 GPU

对 hong_xin 回复

pytorch winfows 版支持 GPU,tersorflow 不清楚,你可以试下

类似 #15 的组合已经用了两个月,很舒爽,系统也很干净。

Windows 10 大为改观了我对 Windows 系统的印象。多桌面的使用体验比 macOS 好很多。

wsl io 性能这么垃圾你们也用的下去

对 liprais 回复

en,文中有说,观点就是 wsl 的性能其实并不是很重要,损耗一些完全可以接受,我更看重系统 GUI 本身以及丰富的 GUI 软件带来操作效率提升。

并且除了运行环境,其他一切都在 WIN 上,包括代码和数据库。所以真正考验 IO 的地方就是 WSL 的文件挂载。

另外我是有 960EVO 加持的,所以实际 IO 强过主流生产环境 ssd 云主机是没什么问题的。

毕竟好看才是第一生产力😎

对 nine 回复

不是我不愿意……电脑是同事的,他不愿意再折腾升级专业版……我自己早就专业版了。

我在 surface pro 上启动中大型 rails 应用 性能可不是 lz 说的可以忍受(哭),启动进程 2 分钟,打断点进到 pry 里要 30s,在 pry 里打一条调试命令也要 30s,完全无法开发

对 xiaok 回复

哈 Surface Pro 肯定不行的,之前的老的 I7 Macbook Air 都慢的一塌糊涂。 这个方案主要还是给台式机用的。一会发下磁盘 IO 测试结果。

对 nine 回复

目前只有 surface pro 类的产品可以满足我对硬件的需求,只能等 wsl2 了,目前用 cloud studio + 一台自己的服务器开发

一直关注但是没实践,昨晚和今早亲自实践了一下, 先上图:

1.win 的 bash 复制黏贴快捷键冲突换了鼠标右键刚一开始有点不适应

.win 的 bash 比较丑虽然我用 zsh + oh my zsh 不过体验依然不如 item2 + zsh + oh my zsh 不过也可以接受在意料之中

3.装好之后 ubuntu 虚拟在 192.168.1.2 上 可以添加共享文件夹

4.zai ubuntu 上装好 ruby 环境 win 上把代码放在贡献文件夹 在 win 上安装 git 这样可以使用 vscode 的 git 功能

5 今早跑到了 rake db:migrate 跑完了还没来得及 rails s 时间到了去上班了 不过我想问题不大了

总结:

对于新手,刚入门资金不足,动手装黑苹果 或者 linux 双系统有困难的同学算是不个不错的工具 它不完美还有很多问题,但是即使是这样它也足够用来让你熟悉 ubuntu bash linux 等知识,入门 ruby 也没有那么高的门槛了,值得尝试成本极低,我是断断续续弄了 3 小时不到吧(主要是下载 ubuntu 很慢),值得一试。

对 kevinyu 回复

终端我用的 MobaXterm,复制粘贴,ctrl+shift+C / V,其他相关需要配置下。

比如直接进 WSL 并启动 ZSH+ 工作区,和指定公钥位置。

rails s 和 rake 任务启动会比较慢。

ubuntu 下载慢,改成国内源会好点。

对 nine 回复

是的 rake rails 执行慢 我是放在固态的不知道为何,源已经改了,另外我发现其实字体看起来并没有那么丑,我换了 4K 显示器之后发现字体美观程度和 mac 几乎是一样的 可能是因为没有毛刺的原因?

对 kevinyu 回复

en,Win10 开启缩放就好了,字体倍儿棒,之前没法用是因为 n 多软件 HDPI 的设计没跟上,缩放后全是毛边,现在基本都搞定了。

rake rails 慢有说是 Windows Defender 的问题,不过我这是关闭的(非法途径关闭),可以等等 WSL2 正式版试试,目前 insider 了 https://www.oschina.net/news/107424/wsl-2-is-now-available-in-windows-insiders

好像弄那个 win terminal 需要安装 vs2017 往后的版本?

对 PaulChan1995 回复

编译的话是需要,不过我没编译成功,试用的网友编译好的版本。

关注这段,host 是如何设置呢? 最后,说下数据库。 我这边数据库是在 win 下安装的,理由也是对 WSL 不太放心,所以此时 Rails 的 database.yml 文件需要配置上 host 和 port。不配 host 和 port 的话会默认连接 WSL 里的 unix 数据库套接字。

对 chorylee 回复

host 不用设置,完全自动的,跟本机一样。

WSL2 端口不能直接访问了,需要做映射https://github.com/microsoft/WSL/issues/4150

WSL 坑补充:

  1. 新建文件权限问题,umask 不生效,导致经常看到警告 https://github.com/Microsoft/WSL/issues/352

  2. windows 挂在文件权限问题,挂在的文件是 777,解决: https://superuser.com/questions/1323645/unable-to-change-file-permissions-on-ubuntu-bash-for-windows-10

对 kevinyu 回复

wsl 靠谱?

对 posee 回复

之前的回答中已经提及了 WSL 适应哪些人群,新手小白 只有 windows 环境且对于 白苹果、黑苹果、ubuntu 等双系统使用有难度的同学,我反正暂时不会用这个毕竟有更好的,还达不到完美的水准。

wsl2 已装,terminal 商店里已经可以用了 00,等待试用

曾因為送修電腦,二個禮拜密集使用 Win10 + WSL 開發 Rails,使用心得是 WSL 相較於現有的解決方案來說,是比較友善且容易處理編譯、安裝相關套件的。但仍會發生權限問題 或 在某些情況下 WSL 掛程式跑會運作到死掉或跳不出程序 ( Ctrl + C ) 😅 😅

对 fangxing204 回复

权限这个问题确实比较别扭,其他的基本是可以用了,

特别的,要是用 docker,也还是挺恶心,当然大部分还是与那堵墙有关系。

哈哈,给楼主点赞,虽然我用的是 mac

整个教程看完了,我只记得了有一包玉溪 😂

推荐一个 SSH 工具 Termius,特别好用,之前一直在 iPad 上使,发现 windows 也支持,设计的非常棒

自己主力机是 mbp15,之前在 WSL 刚出来时在 surface pro 上折腾过,遇到基本楼上遇到过的所有问题(docker io 慢之类),后来一气之下换了一台 new macbook 出差用。

但还是觉得微软这个方向很不错,希望后续能把体验做得更无缝,毕竟使用 windows 的硬件更便宜。

Rei 在 null 提及了此话题。 11月30日 21:58
nine 在 什么差异导致了 AI 领域选择了 py 而不是 rb? 提及了此话题。 06月25日 09:46
对 imdev 回复

能正常 debug 运行吗

需要 登录 后方可回复, 如果你还没有账号请 注册新账号