выберите rmm gemset в заголовке скрипта - PullRequest
7 голосов
/ 05 марта 2011

Я хотел бы указать, какой интерпретатор ruby ​​и какой набор гемов использовать внутри заголовка моего скрипта ruby.Что-то вроде

#!/usr/bin/env source /usr/local/lib/rvm && rvm ruby-1.9.2@system

было бы замечательно.

Любое предложение о том, как это сделать?

Ответы [ 4 ]

5 голосов
/ 25 декабря 2012

#!/usr/bin/env rvm 1.9.3@mygemset do ruby

5 голосов
/ 26 марта 2011

Сообщение Цурдта немного вводит в заблуждение.В моей системе я просто установил rvm (ree, 1.8.7 и 1.9.2 рубины) в системе как root.Мой / usr / local / bin выглядел так:

lrwxrwxrwx 1 root rvm   46 Mar 13 06:50 ree-1.8.7-2011.03 -> /usr/local/rvm/wrappers/ree-1.8.7-2011.03/ruby
lrwxrwxrwx 1 root rvm   44 Mar 13 06:42 ruby-1.8.7-p334 -> /usr/local/rvm/wrappers/ruby-1.8.7-p334/ruby
lrwxrwxrwx 1 root rvm   44 Mar 11 22:42 ruby-1.9.2-p180 -> /usr/local/rvm/wrappers/ruby-1.9.2-p180/ruby

У меня не было гемсета с именем system, как в примере с tcurdt.Поэтому я считаю, что соответствующий способ достижения того, что вам нужно, будет выглядеть так:

#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180

Некоторое объяснение того, что делает здесь rvm: rvm создает сценарии упаковщиков (/ usr / local / rvm / wrappers /*) которые устанавливают такие вещи, как GEM_PATH & GEM_HOME.Это необходимо для правильной загрузки гемов как части конкретной версии ruby.Ссылки на эти сценарии-оболочки создаются в /usr/local/bin, когда вы выполняете системную установку rvm.Если вы установили rvm от себя, они находятся здесь: $HOME/.rvm/bin.

Очень важно поставить префикс строки shebang (#! / ....) с /usr/bin/env.Если вы просто попытаетесь указать ему непосредственно на ruby ​​(например, #! / Usr / local / bin / ruby-1.9.2-p180), этого будет недостаточно.Это связано с тем, что эти обертки на самом деле не являются интерпретатором ruby, они представляют собой сценарии оболочки, которые используют параметры среды перед вызовом сценария в качестве аргумента для интерпретатора ruby, например:

source "/usr/local/rvm/environments/ruby-1.9.2-p180" 
exec ruby "$@"

$@ имя вашего скрипта оболочки передается в ruby.

Наконец, вот пример сценария, который я собрал, который я запускаю в каталоге cgi-bin:

#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180

puts "Content-Type: text/html"
puts
puts "<html>"
puts "<body>"
puts "<h1>Hello Ruby!</h1>"
puts "<p>shebang: #!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180</p>"
puts "<p>RUBY_VERSION: " + RUBY_VERSION + "</p>"
puts "<p>RUBY_PLATFORM: " + RUBY_PLATFORM + "</p>"
puts "<p>RUBY_RELEASE_DATE: " + RUBY_RELEASE_DATE + "</p>"
puts "</body>"
puts "</html>"
4 голосов
/ 06 марта 2011

Это способ сделать это ...

#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180@system
0 голосов
/ 05 марта 2011

Проверьте эту суть:

https://gist.github.com/343545

HTH

...