¿Cómo puedo especificar una gema local en mi Gemfile?


Me gustaría que Bundler cargara una gema local. ¿Hay alguna opción para eso? O tengo que mover la carpeta gema en el .directorio del paquete?

Author: gotqn, 2010-12-20

6 answers

Creo que puedes hacer esto:

gem "foo", :path => "/path/to/foo"
 479
Author: Jimmy Cuadra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-20 08:51:32

Además de especificar la ruta (como Jimmy mencionó), también puede forzar a Bundler a usar una gema local solo para su entorno utilizando la siguiente opción de configuración:

$ bundle config local.GEM_NAME /path/to/local/git/repository

Esto es extremadamente útil si estás desarrollando dos gemas o una gema y una aplicación rails lado a lado.

Tenga en cuenta que esto solo funciona cuando ya está usando git para su dependencia, por ejemplo:

# In Gemfile
gem 'rack', :github => 'rack/rack', :branch => 'master'

# In your terminal
$ bundle config local.rack ~/Work/git/rack

Como se ve en los documentos.

 204
Author: bloudermilk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-02 11:11:50

También puedes hacer referencia a una gema local con git si estás trabajando en ella.

gem 'foo',
  :git => '/Path/to/local/git/repo',
  :branch => 'my-feature-branch'

Entonces, si cambia, corro

bundle exec gem uninstall foo
bundle update foo

Pero no estoy seguro de que todo el mundo necesite ejecutar estos dos pasos.

 28
Author: Rimian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-25 09:03:44

Para usar el repositorio de gemas local en un proyecto Rails, siga los siguientes pasos:

  1. Compruebe si su carpeta gem es un repositorio git (el comando se ejecuta en la carpeta gem)

    git rev-parse --is-inside-work-tree
    
  2. Obteniendo la ruta del repositorio (el comando se ejecuta en la carpeta gem)

    git rev-parse --show-toplevel
    
  3. Configurando un override local para la aplicación rails

    bundle config local.GEM_NAME /path/to/local/git/repository
    

    Donde GEM_NAME es el nombre de tu gema y /path/to/local/git/repository es la salida del comando en point 2

  4. En su solicitud Gemfile agregue la siguiente línea:

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
  5. Corriendo {[12] } debería dar algo como esto:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 
    

    Donde GEM_NAME es el nombre de tu gema y /path/to/local/git/repository desde el punto 2

  6. Finalmente, ejecuta bundle list, no gem list y deberías ver algo como esto:

    GEM_NAME (0.0.1 5a68b88)
    

    Donde GEM_NAME es el nombre de tu gema


Algunos casos importantes que estoy observando usando:

Rails 4.0.2  
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10  
RubyMine 6.0.3
  • Parece que RubyMine no está mostrando gemas locales como una biblioteca externa. Puede encontrar más información sobre el error aquí y aquí
  • Cuando estoy cambiando algo en la gema local, para ser cargado en la aplicación rails debo stop/start el servidor rails
  • Si estoy cambiando el version de la gema, stopping/starting el servidor Rails me da un error. Para arreglarlo, estoy especificando la versión de gema en los rieles aplicación Gemfile así:

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
 16
Author: gotqn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-03 15:49:11

Puede hacer referencia a las gemas con source: source: 'https://source.com', git repository (:github => 'git/url') y con local path :path => '.../path/gem_name'.
Puede obtener más información sobre Gemfiles y cómo usarlos en este artículo.

 0
Author: Nesha Zoric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-09 15:33:59

Si quieres la rama también:

gem 'foo', path: "point/to/your/path", branch: "branch-name"
 -2
Author: C Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-18 22:27:04