2011-03-04 6 views

Respuesta

4

Ésta es la manera de hacerlo ... después

#!/usr/bin/env /usr/local/bin/[email protected] 
+0

hmm, ninguno de mis sistemas tiene ningún rublo enlazado en/usr/local/bin – Kevin

+0

¿quizás están en algún otro lugar en su sistema? – tcurdt

5

de tcurdt es un poco engañoso. En mi sistema acabo de configurar rvm (ree, 1.8.7, & 1.9.2 rubies) en el sistema como root. Mi/usr/local/bin veía así:

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 

no tenía un sistema de llamada gemset como en el ejemplo de tcurdt. Así que creo que el modo adecuado de alcanzar lo que está buscando sería así:

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

Algunos explicación de lo que está haciendo RVM aquí: RVM crea scripts de envolturas (/ usr///RVM envolturas locales/*) que establece cosas como GEM_PATH & GEM_HOME. Estos son necesarios para que las gemas se puedan cargar correctamente como parte de una versión específica de ruby. Los enlaces a estos scripts de envoltura se crean bajo /usr/local/bin, cuando realiza una instalación del sistema de rvm. Si ha instalado rvm como usted, se encuentran aquí: $HOME/.rvm/bin.

Es fundamental prefijar la línea shebang (#!/....) con el /usr/bin/env. Si solo intentas dirigirlo directamente hacia un rubí (por ejemplo, #!/Usr/local/bin/ruby-1.9.2-p180) no será suficiente. Esto se debe a que estas envolturas no son en realidad el intérprete de Ruby, que son secuencias de comandos shell que este buscando una configuración del entorno antes de llamar a la secuencia de comandos como un argumento a la intérprete de Ruby, así:

source "/usr/local/rvm/environments/ruby-1.9.2-p180" 
exec ruby "[email protected]" 

la [email protected] es su cáscara nombre de script que se pasa a ruby.

Finalmente aquí es un script de ejemplo que puse juntos, lo que corro en un directorio 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>" 
+0

Si bien es muy elaborado, esa no es la respuesta correcta a la pregunta. ¡No solo quiero seleccionar una determinada versión de rubí sino también la gemset! Afortunadamente, rvm crea scripts de envoltura no solo para la versión ruby ​​sino también para los gemas. Por supuesto, si no tiene un gemset de "sistema" no tiene sentido tratar de seleccionarlo;) BTW: Simplemente seleccionando la versión de ruby ​​también podría usar rvm-shell – tcurdt

+0

No había notado rvm-shell.Entonces uno podría usar: #!/Usr/bin/env/usr/local/bin/rvm-shell? ¿Con qué rubí y gemset terminarías? – slm

5

#!/usr/bin/env rvm [email protected] do ruby

+0

Esta parece ser la forma más limpia de lograr esto. –

+0

Esto no funciona para mí. RVM 1.26.11, Ubuntu 15.04 –

Cuestiones relacionadas