Rails 7如何定位Ruby可执行文件?

w6lpcovy  于 2023-10-17  发布在  Ruby
关注(0)|答案(2)|浏览(119)

我是Ruby和Rails的新手,我的Rails安装无法在CLI中运行,因为它在错误的地方寻找Ruby。
TLDR问题-我如何将Rails指向我的Ruby安装?
下面是我运行的命令和它的输出。它在错误的目录中查找ruby。

$ rails -v
/c/Users/<username>/AppData/Local/Microsoft/WindowsApps/rails: line 6: /c/Users/<username>/AppData/Local/Microsoft/WindowsApps/ruby: No such file or directory

我正在使用rubyinstaller-devkit-3.2.2-1-x64上的ruby安装。安装完成后,我使用gem install rails命令安装了rails。我一直关注Rails社区的installation instructions,直到检查我安装的版本。
我做了一些搜索,了解到.bat文件可以定义rails在哪里查找ruby或其他软件包,并且它们可以独立运行。我可以像这样运行rails.bat,得到以下结果:

$ ~/AppData/Local/Microsoft/WindowsApps/rails.bat -v
Rails 7.0.7.2

所以我打开rails.bat,它包含了

@ECHO OFF
@ruby.exe "%~dpn0" %*

我阅读了批处理文件及其语法,并编辑了rails.bat,以便可以看到正在运行的命令。以下是该实验的输出:

$ ~/AppData/Local/Microsoft/WindowsApps/rails.bat -v

C:\Users\<username>\workspace\ruby-work>ruby.exe "C:\Users\<username>\AppData\Local\Microsoft\WindowsApps\rails" -v
Rails 7.0.7.2

在搜索时,我看到Rails用户对某些安装程序硬编码的路径不正确感到非常震惊,但我在这里没有看到硬编码。此外,他们似乎通过纠正相关的.bat文件来解决问题(这是针对旧版本的Rails和Ruby)。但是,当我编辑我的.bat文件,并重新运行rails -v时,我得到了相同的输出-它总是在同一个目录中查找,无论我在.bat文件中定义了什么路径。

如何将Rails指向包含我的ruby安装的目录?

最后,这里是一些版本和位置信息,我希望是有帮助的。我在Windows 10上运行。

$ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mingw-ucrt]
$ gem -v
3.4.10
$ which ruby
/c/Ruby32-x64/bin/ruby
$ which rails
/c/Users/<username>/AppData/Local/Microsoft/WindowsApps/rails
$ ~/AppData/Local/Microsoft/WindowsApps/rails.bat -v
Rails 7.0.7.2

编辑:注意上面的命令是在bash shell中发出的。回顾我的PATH,我看到的唯一与Ruby相关的包含是这个。

C:\Ruby32-x64\bin;

到目前为止,我还没有定义任何与Ruby开发相关的环境变量。

nnvyjq4y

nnvyjq4y1#

根据@Casper的建议,我打开了/c/Users/<username>/AppData/Local/Microsoft/WindowsApps/rails文件,看看编辑它是否有帮助。在里面,我发现了下面的代码片段,它似乎是针对ruby可执行文件的:

=begin
bindir="${0%/*}"
exec "$bindir/ruby" "-x" "$0" "$@"
=end

通过像这样更改bindir的值,我可以通过命令行成功运行rails命令:bindir="C:/Ruby32-x64/bin"
这里的缺点是,每当我需要更新或更改Ruby的版本时,我都需要手动更新此路径。这感觉更像是一个解决方案,但它让我开始运行。

at0kjp5o

at0kjp5o2#

问题可能是rails.bat文件被硬编码为在C:\Users\<username>\AppData\Local\Microsoft\WindowsApps目录中查找Ruby。您可以通过编辑rails.bat文件并更改Ruby安装路径来修复此问题。
找到rails.bat中的一行,它说:

ruby.exe "%~dpn0" %*

更改Ruby安装的路径,如下所示:

ruby.exe "C:\Ruby32-x64\bin\ruby" %*

现在,当您运行rails -v命令时,它应该能够找到您的Ruby安装并打印版本号。
或者,您需要检查PATH环境变量是否包含Ruby安装的正确路径。

相关问题