RubyMetric / rbenv-for-windows

rbenv for Windows - Manage your app's Ruby environment on Windows
MIT License
119 stars 13 forks source link

提一些小建议 #21

Open zhangzikai opened 1 year ago

zhangzikai commented 1 year ago

1.ruby.exe一定要放在path里.可以只能在powershell里使用rbenv,但是不能只能在powershell里才可以使用ruby 2.启动powershell就自动安装ruby?这是什么鬼.我还没选择版本呢,你就给我乱搞,我建议别人第一次选择安装ruby的时候再去懒初始化 3.提供选项,让别人可以选择使用自己的msys,别人自己的msys里有很多库,ruby自己搞一套msys,自己管理一套库,很混乱 4.ridk.ps1 里的& $rubyexe $args 改成 & $rubyexe ($args -join " ") ,不然ridk enable 会报错

ccmywish commented 1 year ago

Hi @zhangzikai

非常感谢你的建议和反馈,我将认真考虑。

  1. 这个有道理,也是一个比较困扰我的问题,还是受制于实现才这么做的,将来可能会改变。
  2. 第2个和第3个其实是一起的,因为ruby的MSYS2并不是纯粹的MSYS2,上游往里面塞了一些包的(似乎并不在MSYS2官方源中),还做了一些额外处理,所以用户自己的MSYS2应该没有这些,甚至可能无法通过pacman安装。所以会影响正常使用。一上来就强制用户安装最新的ruby,其实目的是为了保证有这么一个RubyInstaller2打包的MSYS2环境
  3. MSYS2环境对Windows上的Ruby非常重要,MSYS2的位置非常影响Ruby的启动速度,如果你把MSYS2放在比如D盘之类的地方,你的Ruby程序启动时间将会延长至3,4秒。所以MSYS2的位置放在当前rbenv的设计的位置,是默认启动速度最快的,只有70ms。这个逻辑并不是我写的,而是RubyInstaller2项目写的。所以不明所以的用户如果使用了自己的MSYS2,可能极度影响他自己的体验
  4. 这个可能是你的PowerShell的版本问题,你可以发一下你的PowerShell版本。在我这边用的是pwsh,ridk enable 没有这个问题。但是我没有用 cmd 试过,您对此有需求吗?

希望上述2和3的现状的解释,能一定程度上消解您的不满。

其实最主要的问题是,理清上述这些问题需要耗费比较大的时间和精力,尤其是MSYS2那一块,我一直有意要去看完上游RubyInstaller2的打包项目,但是一直没抽出时间。

过一阵子,我将对这些代码研究一遍,然后做出一些改变。再次感谢您的建议,这个issue我会保持开启

ccmywish commented 1 year ago

我能感觉到您是 MSYS2 的重度用户,所以给您带来了不便。

我目前的做法是,直接用rbenv下载下来的MSYS2作为主要环境,日常开发也是用 ridk exec 来工作。

这个问题确实有待考虑,希望您谅解,一两个月之内受时间问题我可能无法做出改变,深表歉意。

zhangzikai commented 1 year ago

1.把bin和shim文件夹直接给加到path里,然后根据用户设置好的版本,转发命令不就好了? 另外干嘛要pwsh执行的时候就去检查global.txt,需要判断这个东西在不在,得是rbenv version执行的时候吧

2.3.我研究了一下rubyinstaller去找msys的逻辑,比如ruby安装在了 c:/a/b/c/bin/ruby.exe.他找的顺序会是 c:/a/b/c/msys->c:/a/b/msys->c:/a/msys->c:/msys.可以利用这个机制. 另外rubyinstaller说支持用户自行安装的msys,执行ridk,选择3,rubyinstaller会自动在找到的msys里面 (没有的话就会去安装环境),用pacman安装他所需要的包,可以和用户msys很好的集成在一块

我们不在初始化时直接安装msys.而是等到用户执行安装命令的时候 rbenv install 3.1 --msys-location=c:/msys64 我们检测用户提供msys位置了没有 提供了的话,我们在 c:/ruby-windows/msys位置hash/ 下面搞个软链接,把 c:/ruby-windows/msys位置hash/msys 链接到那个位置,ruby的话安装到 c:/ruby-windows/msys位置hash/ruby 然后执行一下ridk,3.如果没有提供,则还是那一套,先判断是不是共享msys的ruby,看看c:/ruby-windows/default/msys在不在,不在的话,安装,然后把msys挪出来;不共享的话,直接安装

4.我是powershell7.3.7(不是windowspowershell),rbenv 的ridk里面& $rubyexe $args ,在ruby的idk里 有一句 $op=$args+"enable",直接调用 ruby的idk,$op是个string,而转发的$op是个object[],转成string会用回车符join起来,搞出问题来

ccmywish commented 1 year ago

@zhangzikai

第4个已复现并确认,已按照您的方式修复,非常感谢。

第1个现在由于有fake ruby.exe的存在,暂时无法直接转发,我将会用另一种方式试试看。

2和3的话,如果能够确认ridk install安装的没有问题,可以采取这种方式,我会试验一下,如果确认各方面可以工作,将会采取您的建议。感谢。

ccmywish commented 1 year ago

4.ridk.ps1 里的& $rubyexe $args 改成 & $rubyexe ($args -join " ") ,不然ridk enable 会报错

这个方法有问题,导致ridk exec 报错,我已修复。

ccmywish commented 1 year ago

1.ruby.exe一定要放在path里.可以只能在powershell里使用rbenv,但是不能只能在powershell里才可以使用ruby

该问题已解决,PowerShell 和 cmd 下均可以使用 ruby, rubyw, ridk 三个命令,请使用 rbenv update 来更新试用。