Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

164
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!