Как узнать, какой исполняемый файл Ruby использовался в скрипте ruby? - PullRequest
0 голосов
/ 22 января 2020

в системе имеется две Ruby среды, обычная ruby и встроенная в Chef ruby. Я хочу знать, в скрипте ruby, какой исполняемый файл ruby используется для вызова самого скрипта. Как можно получить это?

1 Ответ

2 голосов
/ 22 января 2020

Рекомендуемые решения

Используйте плохо документированный модуль RbConfig, если доступен:

RbConfig.ruby
#=> "/Users/foo/.rubies/ruby-2.7.0/bin/ruby"

В качестве альтернативы, вы можете использовать более простой для поиска Gem модуль из стандартной библиотеки сделать то же самое:

Gem.ruby
#=> "/Users/foo/.rubies/ruby-2.7.0/bin/ruby"

Другие подходы

Модули RbConfig и Gem - ваш лучший выбор, но могут быть моменты, когда вам нужно получить версию или путь информации другим способом. Вот несколько различных подходов.

Получить версию

Вы можете вернуть версию выполнения Ruby в виде строки с помощью:

RUBY_VERSION
#=> "2.7.0"

Получить путь

Ruby обычно устанавливается на bin/ruby в RUBY_ ROOT. Вы можете вернуть ожидаемый путь к исполняемому двоичному файлу Ruby (и убедиться, что он действительно существует, если необходимо) следующим образом:

ENV["RUBY_ROOT"] + "/bin/ruby"
#=> "/Users/foo/.rubies/ruby-2.7.0/bin/ruby"

File.exist? ENV["RUBY_ROOT"] + "/bin/ruby"
#=> true

В качестве альтернативы, вы можете использовать Kernel # ` для найдите первый Ruby в вашем PATH следующим образом:

`which ruby`.chomp
=> "/Users/foo/.rubies/ruby-2.7.0/bin/ruby"

Однако, безусловно, существуют крайние случаи, когда любой подход может вводить в заблуждение. Например, Ruby может быть построен нестандартным способом, или вы могли вызвать Ruby с полным путем, а не вызывать первый двоичный файл в PATH . Это делает «накатывание» ваших собственных поисков менее надежным, но если в вашей среде по какой-то причине отсутствуют модули RbConfig или Gem, это может быть разумной альтернативой для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...