Techioz Blog

Rails 7 はどのようにして Ruby 実行可能ファイルを見つけますか?

概要

私は Ruby と Rails を初めて使用しますが、Ruby が間違った場所で検索されるため、Rails インストールを CLI で実行できません。

TLDR の質問 - レールを 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 コミュニティのインストール手順に従いました。

いくつかの検索を行ったところ、.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 シェルで発行されたことに注意してください。 PATH を確認すると、Ruby 関連のインクルードはこれだけです。

C:\Ruby32-x64\bin;

現時点では、Ruby 開発に関連するこれ以上の環境変数はまだ定義されていません。

解決策

@Casper の提案に従って、/c/Users//AppData/Local/Microsoft/WindowsApps/rails ファイルを開いて、編集が役立つかどうかを確認しました。その中に、Ruby 実行可能ファイルをターゲットにしていると思われる次のスニペットが見つかりました。

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

このようにbindirの値を変更すると、コマンドラインからrailsコマンドを正常に実行できるようになります。 bindir=“C:/Ruby32-x64/bin”

ここでの欠点は、Ruby のバージョンを更新または変更する必要がある場合には、このパスを手動で更新する必要があることです。これはむしろ回避策のように思えますが、これで起動して実行することができました。