2008-12-02 9 views
16

Por defecto, cuando se sudo gem install thegemname se instalará ejecutables en /usr/bin/¿Se puede configurar "gem install" para instalar ejecutables fuera de/usr/bin/de forma predeterminada?

¿Hay una manera de cambiar esta situación? Por ejemplo, para instalarlos en /usr/local/rubygems/bin (¿o en cualquier otra ruta)?

El camino no parece ser codificadas en el archivo gemspec, así que no veo por qué esto no debería ser posible (aunque no tengo muy poca experiencia con Ruby/Gems)

Respuesta

14

Ver http://www.rubygems.org/read/chapter/11 y especifique un ~/.gemrc que define una variable gemhome.

Por ejemplo:

gemhome: /usr/local/rubygems 

También puede colocar este archivo en /etc/gemrc

alternativa, puede configurar el GEM_HOME env-variable:

$ export GEM_HOME=/tmp/gemtest 
$ gem install bundler 
$ ls /tmp/gemtest/bin/ 
bundle 
+2

Gracias! Espero que no te importe que haya actualizado tu respuesta. Empujé alrededor de rubygems.rb - el bin dir se adjuntó a gemhome, no parece que exista una forma obvia de anular solo esto, pero establecer gemhome en /Library/Ruby/Gems/1.8/ (en OS X) da una ruta bin de /Library/Ruby/Gems/1.8/bin que es perfecto – dbr

+0

¡Buena actualización, gracias! – csl

+1

Gah, no del todo perfecto. Hay una anulación predeterminada/usr/bin para la distribución Mac. – dbr

2

En OS X, el directorio de la aplicación se anula a /usr/bin en el archivo /Library/Ruby/Site/1.8/rubygems/defaults.rb

# The default directory for binaries 
def self.default_bindir 
    if defined? RUBY_FRAMEWORK_VERSION then # mac framework support 
    '/usr/bin' 
    else # generic install 
    ConfigMap[:bindir] 
    end 
end 

Como un trabajo de hackear, cambié /usr/bin a la ubicación de mi ubicación deseada, que funciona correctamente. No parece haber ninguna forma de anular bindir de la configuración ~/.gemrc?

+1

Esto es realmente molesto. No hay forma de cambiar esto porque depende de la constante global. Y si lo cambia cada vez que Rubygems se actualiza, debe cambiarlo nuevamente. Me gustaría dispararle al tipo responsable de esta terrible decisión. – mxcl

+1

Envié un informe de error para esto: http://rubyforge.org/tracker/index.php?func=detail&aid=27641&group_id=126&atid=575 – mxcl

+1

En realidad, estábamos equivocados. Puedes cambiar el bindir. Lo documenté aquí: http: //wiki.github.com/mxcl/homebrew/cpan-ruby-gems-and-python-disttools – mxcl

18

estoy añadiendo esto como una respuesta de modo que es obvio cuando me encuentro con este problema de nuevo :)

En primer lugar, mover todos los contenedores en /var/lib/gems/1.8/bin/-/usr/bin/. Si no lo hace, desinstalar o actualizar una gema no eliminará el binario del directorio bin original.

También puede desear para eliminar la ruta antigua de $PATH

A continuación, editar ~/.gemrc y añadir (o actualizar) la siguiente línea:

gem: --bindir /usr/bin 

Esto anula la gema para que siempre utiliza/usr/bin/como el bin dir.

No es necesario actualizar la ruta (especialmente desordenada para máquinas de varios usuarios).

+0

Sí, parece que funciona perfectamente (al menos en Rubygem 1.3.6) – dbr

+0

¿Cómo lo hace?: * También es posible que desee eliminar el ruta anterior desde $ PATH * –

+0

@JohnRPerry Hay varias buenas técnicas para [eliminar directorios de $ PATH] (https://stackoverflow.com/q/11650840/41688) – BryanH

Cuestiones relacionadas