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

nine · 2019年05月09日 · 最后由 xiaok 回复于 2019年05月14日 · 1710 次阅读
本帖已被设为精华帖!

最近使用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倍。 (完)

共收到 21 条回复

請問一下最近的 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 + 一台自己的服务器开发

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