最近使用 Windows 10 比较多,越来越觉得 Mac 的 GUI 是上个世纪的产物了,所以一直在琢磨要不要在 Win 上搞 Ruby。刚巧,本月微软公布了 3 个讨好 Linux/Unix 开发者的产品/功能。
其中 VSCode Remote 是一组插件,由 3 个插件组成
具体介绍可以看 VS Code Remote 发布!开启远程开发新时代
于是尝试了一把 Win 下开发。之前也 try 了一下虚拟机方案,感觉不是我想要的,而且挂载系统有 bug。看到新闻后,想起来之前同事在 2017 年就使用 WSL 了,而且在我们公司的实际项目中使用了大半年,并没有什么不妥。
在 Windows 上运行的 Linux,和虚拟机不同,WSL 和宿主 Windows 是几乎无缝的。
有很多发行版可以用,我选择的是 Ubuntu,WSL 2 还早,目前可安装的 WSL 1 完全可以胜任(如何安装?在 Microsoft Store 里点击安装,网上有图文详细教程,可自行 Google)
编译过程比较麻烦,我没有编译成功,用网友编译好的版本,提示证书问题,装不上。后来按 第 45 期 Windows Terminal 微软新版终端工具安装教程 的步骤,把证书搞定,安装成功了。不过实际体验和 Hyper、ConEmu 没有什么质的差别。
附 2 个网友编译版下载地址:
https://cloud.natfrp.org/s/AaxfrxK96JebHsj
http://cdn.lr3800.52qdw.cn/Terminal.7z
VSCode 的 Remote 方案也尝试了,实际结果是没有什么卵用。
也就是说使用任意 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 上的。
不过
其他:想到再补充。
安装插件后,按 Ctrl + Shift + P 调出菜单选择 Connect to Host 选择 Configure SSH Hosts 编辑远程服务器
编辑后点击左侧电脑图标,可以看到常用的 host,点击后可以连接到服务器
之后会打开一个新的 VSCode 窗口,左下角显示 SSH 连接标志。
之后可以编辑服务器上的文件
RemoteSSH 默认使用公钥连接,所以连接服务器之前需要安装 OpenSSH,生成公钥,然后在服务器上配置好公钥,不然就会一直连接不上。
连接容器的,容器没怎么玩过,未测试,理论上应该和 Remote SSH 差不太多。
SOHO 的 007 们可以在工作累了的时候无缝切换到游戏模式了。 (逃
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 倍。 (完)