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:
Ejecute gem install meta_request
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 endbin/rails a .git/info/excludeNB: 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?
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!
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' endo
group :test do gem 'gem-name' endNo 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' endluego iniciará su servidor en su máquina dev con
RAILS_ENV=lh_development rails spor 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?