Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

165
Vistas
Use una gema localmente en una aplicación de Rails sin modificar el Gemfile

Necesito usar localmente una gema ( Panel de rieles ) en una aplicación de rieles sin agregar código a git .

La razón por la que no puedo modificar el código en el control de versiones es porque mi equipo tiene una política muy estricta sobre la adición de nuevas gemas. No es ideal, pero puedo excluir archivos del control de versiones si es necesario.

Probé la siguiente solución pero no funciona:

  1. Ejecute gem install meta_request

  2. Modifique el archivo bin/rails con el siguiente código:

 #!/usr/bin/env ruby # original code [...] gems = %w[meta_request] gem_home = ENV['GEM_HOME'] gem_dir = Dir["#{gem_home}/gems/*/lib"] gems.each do |gem| gem_path = gem_dir.select { |r| r.include?(gem) } $LOAD_PATH.append(*gem_path) require gem end
  1. Agregue bin/rails a .git/info/exclude

NB: La respuesta a este hilo no funciona en este caso porque la gema debe ser "requerida". ¿Cómo puedo usar una gema localmente sin forzarla a los colaboradores?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Solución 1 (fácil de entender pero no genérica)

Una solución rápida sin modificar la ruta de carga.

Paso 1, abra una terminal y ejecute este comando para obtener la ruta completa de la gema que desea usar localmente:

 gem which GEM_NAME

Paso 2, cree un archivo de inicialización local_dependencies.rb en config/initializers/ y solicite sus gemas en el archivo como este:

 # file: config/initializers/local_dependencies.rb require 'GEM_FULL_PATH'

Paso 3, edite .git/info/exclude y excluya el archivo local_dependencies.rb :

 # file: .git/info/exclude config/initializers/local_dependencies.rb

¡Todo listo!

Solución 2

Esta es una solución más genérica, aunque ambas soluciones omiten el paquete, pero la ventaja es que no tiene que actualizar Gemfile.

Cree un archivo de inicialización local_dependencies.rb en config/initializers/ y agregue este código:

 gems = { 'meta_request' => '0.7.2', } gem_home = ENV['GEM_HOME'] gems.each do |gem_name, version| gem_path = "#{gem_home}/gems/#{gem_name}-#{version}/lib" raise "GemNotFound: name: #{gem_name}, version: #{version}" unless File.directory?(gem_path) $LOAD_PATH << gem_path require gem_name end

Edite .git/info/exclude y excluya el archivo local_dependencies.rb :

 # file: .git/info/exclude config/initializers/local_dependencies.rb

¡Todo listo!

over 4 years ago · Santiago Trujillo Denunciar

0

Siempre puede definir grupos como desarrollo o prueba que no afectarán nada en producción para que pueda enviarlos a git sin preocuparse por el código.

 group :development do gem 'gem-name' end

o

 group :test do gem 'gem-name' end
over 4 years ago · Santiago Trujillo Denunciar

0

No hay nada mágico en los nombres de los entornos ('desarrollo', 'producción', 'prueba'). Entonces puede definir un entorno que solo use, como 'lh_development'.

Para admitir esto, necesitará un archivo config/environments/lh_development.rb, que sería esencialmente un duplicado de config/environments/development.rb. Y en su Gemfile, puede definir las gemas incluidas en el grupo :lh_development...

 group :lh_development do # here list all the same gems that are included in the :development group gem 'meta-request' end

luego iniciará su servidor en su máquina dev con

 RAILS_ENV=lh_development rails s

por supuesto, no sería aconsejable probar su código con su gema especial incluida, porque su compilación de prueba debe ser la misma que la de los otros desarrolladores y la compilación de producción.

Supongo que esto no cumple estrictamente con su requisito de no modificar Gemfile, pero lo hace de una manera que no afecta a otros desarrolladores o entornos de prueba/producción. Entonces, ¿tal vez su equipo pueda vivir con eso?

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda