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

nine · 2019年05月09日 · 最后由 guanting112-github 回复于 2019年07月08日 · 4232 次阅读
本帖已被设为精华帖!

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

共收到 35 条回复

請問一下最近的 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 ) 😅 😅

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