2012-09-08 20 views
6

He clonado un repositorio de Github, ahora quiero experimentar con él, ya que quiero explorar el código y meterme con él. Creé un archivo test.rb que debería cargar esta joya, pero quiero cargar mi versión local, ¿cuál es la forma correcta de hacerlo?¿Cómo cargo una gema de la fuente?

Ahora mismo estoy usando un montón de "require_relative 'the_gem_name/lib/file'", lo cual parece incorrecto.

+0

Simplemente use 'require 'gemname'' si creó' test.rb' en el directorio gem. –

+0

¿tienes un gemfile? – apneadiving

+0

Me gustaría crear test.rb fuera del directorio gem si es posible. Y no, no tengo un gemfile. – foobar

Respuesta

8

Cuando require 'foo' Ruby comprueba todos los directorios en la ruta de carga para un archivo foo.rb y carga el primero que encuentra. Si no se encuentra un archivo llamado foo.rb, y usted es no usando Rubygems, se genera un LoadError.

Si son usando Rubygems (que probablemente se da que se incluye en Ruby 1.9+), a continuación, en lugar de elevar inmediatamente a LoadError todas las gemas instaladas se buscaron para ver si uno contiene un archivo foo.rb. Si se encuentra una Gema así, se agrega a la ruta de carga y se carga el archivo.

Puede manipular la ruta de carga usted mismo si desea asegurarse de que se utiliza una versión particular de una biblioteca. Normalmente, esto no es algo que se recomienda, pero este es el tipo de situación en la que le gustaría hacerlo.

Hay dos formas de agregar directorios a la ruta de carga. En primer lugar puede hacerlo en el código real, utilizando el $LOAD_PATH (o $:) variable global:

$LOAD_PATH.unshift '/path/to/the/gems/lib/' 
require 'the_gem' 

Tenga en cuenta que normalmente se desea añadir el lib dir de la gema, no el directorio de nivel superior de la gema (en realidad esto puede variar dependiendo de la Gema real, y es posible que necesite agregar más de un directorio, pero lib es la norma).

La otra forma es utilizar el modificador de línea de comandos para la -Iruby ejecutable:

$ ruby -I/path/to/the/gems/lib/ test.rb 

De esta manera podría ser un poco más limpio, ya que normalmente no desea estar jugando con la trayectoria de la carga de dentro de tu código, pero si solo estás probando la biblioteca probablemente no importe mucho.

+0

Tenga en cuenta que puede consultar gemspec para asegurarse de que lib es el único [requiere ruta] especificado (http://guides.rubygems.org/specification-reference/#require_paths). Así es como la gema le dice a Rubygems dónde buscar cuando necesita un archivo. –

+0

+1 esta es una gran solución para construir una gema y consumirla en tándem desde otro proyecto, como yo. – ashes999

+0

'-I' fue la mejor parte. ¡Simplemente usé '--gem' con' pry' para probar rápidamente mis cambios! – Pysis

2

Siguiendo la sugerencia de apneadiving en los comentarios, he creado un Gemfile y añade esta línea

source "http://rubygems.org" 

gem 'gem_name', path: '~/path/to/gem/source/folder' 

Entonces bundle install, y bundle exec ruby test.rb y funcionó.

Cuestiones relacionadas