no se puede cargar dicho archivo - paquete / instalación (LoadError)


128

Estoy configurando la aplicación Rails 4 con Ruby 2.0, pero obtengo "No se pudo iniciar la aplicación web" y obtengo este seguimiento:

cannot load such file -- bundler/setup (LoadError)
  /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
  /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/lib/phusion_passenger/loader_shared_helpers.rb:212:in `run_load_path_setup_code'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:96:in `preload_app'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:150:in `<module:App>'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
  /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:28:in `<main>'

Mi apache2.conf es:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19
   PassengerDefaultRuby /usr/local/bin/ruby

bundle -v es:

Bundler version 1.3.5

ruby -v es:

ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

gem env es:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.1.5
  - RUBY VERSION: 2.0.0 (2013-06-27 patchlevel 247) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/lib/ruby/gems/1.8/bin
  - SPEC CACHE DIRECTORY: /root/.gem/specs
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /root/.gems/bin
     - /usr/lib/ruby/gems/1.8/bin/
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/bin/X11
     - /usr/games
     - /usr/sbin
     - /sbin

echo $GEM_PATH es:

/usr/lib/ruby/gems/1.8:/usr/lib/ruby/gems/1.8

No debe GEM_PATHser /usr/lib/ruby/gems/2.0?

Dentro del host virtual en apache2.conf agregué:

SetEnv GEM_HOME /usr/lib/ruby/gems/1.8

Y ahora está funcionando.

¿Es la forma correcta de arreglar esto?

Respuestas:


49

¿Podría ser que hubo un Ruby env instalado previamente en su sistema antes de su instalación de 2.0? Esto podría haber tenido un GEM_PATH existente que condujera al directorio /1.8 que simplemente mantuvo la instalación de la versión 2.0.

El problema que probablemente tenía, entonces, era que Passenger / Apache estaba buscando en el directorio /2.0 cuando de hecho las gemas estaban en el directorio /1.8. De manera explícita, decirle a Apache que use el directorio /1.8 tiene sentido para solucionar el problema.

SetEnv GEM_HOME /usr/lib/ruby/gems/1.8

También puede intentar usar Ruby Version Manager para manejar múltiples envs de Ruby.

Algunas cosas que encontré en Google:


202

Tuve casi exactamente el mismo error y pude solucionarlo por completo simplemente ejecutando:

gem install bundler

Es posible que la instalación de su paquete esté dañada o falte, eso es lo que sucedió en mi caso. Tenga en cuenta que si lo anterior falla, puede intentar:

sudo gem install bundler

... pero generalmente puedes hacerlo sin sudo.


2
¡Este era yo! Pregunta: ¿es sudorealmente necesario? Solía, sudopero ahora me pregunto qué habría pasado si no lo hubiera hecho.
Pete

2
Si está utilizando una versión diferente de Ruby que la predeterminada del sistema, ¡NO necesita usarla sudo! sudo gem ....instalará la defaultversión de la gema y (en mi caso, Ubuntu 14.04) sudono puede ejecutar rvm.
Farfromunique

1
En mi sistema macOS, necesitaba sudoel ruby ​​predeterminado del sistema, pero no lo necesitaba para ninguna versión de ruby ​​que instalé con rvm.
Ben Visness

1
Solo una nota para decir que esta fue la solución para mí usando Windows Subsystem for Linux, después de la reciente actualización de Windows. Por alguna razón, la actualización eliminó mis instalaciones de RVM ruby.
Ben Fulton el

1
Hola, tengo el mismo problema que la pregunta con ubuntu con gem 2.7.6y ruby 2.5.0p0¿qué hacer?
TheCrazyProfessor

28

Lo más probable es que tenga más de un Ruby instalado.

Si está utilizando RVM, probablemente necesite ejecutar:

rvm use system

configurar la versión de ruby ​​para usar.

Ver http://rvm.io/rubies/default

ruby -v

le dirá la versión que está utilizando actualmente.


25

Puedes intentar ejecutar:

bundle exec rake rails:update:bin

Como @Dinesh mencionó en Rails 5:

rails app:update:bin

10

En mi caso, las líneas adjuntas al archivo de configuración de apache después de instalar el pasajero fueron las siguientes:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-.0.24/buildout/apache2/mod_passenger.so 
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.24 
PassengerDefaultRuby /usr/bin/ruby1.8

Pero la aplicación requiere Ruby 2.0.0, así que me tomó un tiempo, pero finalmente, el error se resolvió después de especificar una ruta diferente usando 'PassengerRuby' a continuación, dentro del archivo de configuración de host virtual de Apache para la aplicación:

...
VirtualHost *:80>
  ServerName www.yourhost.com

 **PassengerRuby /home/user/.rvm/gems/ruby-2.0.0-p247**
  # !!! Be sure to point DocumentRoot to 'public'!
  DocumentRoot /somewhere/public    
  <Directory /somewhere/public>
     # This relaxes Apache security settings.
     AllowOverride all
     # MultiViews must be turned off.
     Options -MultiViews
  </Directory>
</VirtualHost...

Este fue el caso conmigo también. En mi caso PassengerDefaultRubyse refería a una antigua instalación de rubí.
Waseem

8

Recibí este error en una nueva aplicación Rails con el paquete instalado correctamente. Al comentar la gema de primavera en Gemfile se resolvió el problema.


44
Esto fue para mí, pero en gem install springlugar de comentar.
jakenberg

3

Me encontré con el mismo problema, pero creo que se debió al springalmacenamiento en caché de algunas gemas y configuraciones. Lo arreglé corriendo gem pristine --all.

Esto restaura las gemas instaladas a su estado original de los archivos ubicados en el caché de gemas.

o simplemente puedes probar tu gema como

gem pristine your_gem_name

1

Esto estaba sucediendo en el entorno de producción para mí.

rm /vendor/bundle

luego bundle install --deployment

resuelto el problema.


1

Otra situación posible: tiene múltiples usuarios definidos en su entorno de servidor. En ese caso, corriendo

passenger-config --ruby-command

le dará el comando necesario para especificar su nginx/sites-enabled/relevant_applicationarchivo con su caso de uso, por ejemplo:

passenger-config was invoked through the following Ruby interpreter:
Command: /home/other_user/.rbenv/versions/2.4.5/bin/ruby
Version: ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-linux]
To use in Apache: PassengerRuby /home/other_user/.rbenv/versions/2.4.5/bin/ruby
To use in Nginx : passenger_ruby /home/other_user/.rbenv/versions/2.4.5/bin/ruby
To use with Standalone: /home/other_user/.rbenv/versions/2.4.5/bin/ruby /usr/bin/passenger start

1

Tuve el mismo problema y probé todas las respuestas sin suerte.

pasos que hice para reproducir:

  1. rvm instal 2.1.10
  2. rvm gemset create my_gemset
  3. rvm use 2.1.10@my_gemset
  4. bundle install

Sin embargo bundle installinstalado Rails, pero todavía tengo cannot load such file -- bundler/setup (LoadError)

finalmente corriendo lo gem install rails -v 4.2arregló


1

La versión del paquete puede causar el problema.

Instale el paquete con otro número de versión.

Por ejemplo,

gem install bundler -v 1.0.10


En mi caso, este error ocurre después de instalar el bundler v2 . Lo resuelvo con gem uninstall -a bundler; gem install bundler -v '<2.0'.
SergA

0

Tuve esto porque algo malo estaba en mi vendor/bundle. Nada que ver con Apache, solo en el entorno de desarrollo local.

Para solucionarlo, eliminé vendor\bundley también eliminé la referencia a él en mi .bundle/configpara que no se reutilice.

Luego, volví a empaquetar (que luego instalé en GEM_HOMElugar de vendor/bundley el problema desapareció).


0

NOTA: Mi empresa de alojamiento es Site5.com y tengo un VPS administrado.

Agregué variables env para GEM_HOME y GEM_PATH al archivo .htaccess en mi directorio public_html (un alias al directorio público en la aplicación rails)

No eran necesarios antes, por lo que algo debe haber cambiado en el lado de los hosts. Recibió este error después de tocar el archivo restart.txt para reiniciar el servidor de pasajeros.

Consiguió GEM_PATH por:

echo $ GEM_PATH

Obtuve el GEM_HOME por:

joya env

 RubyGems Environment:
   - RUBYGEMS VERSION: 2.0.14
   - RUBY VERSION: 2.0.0 (2013-11-22 patchlevel 353) [x86_64-linux]
   - INSTALLATION DIRECTORY: /home/username/ruby/gems
   - RUBY EXECUTABLE: /usr/local/ruby20/bin/ruby
   - EXECUTABLE DIRECTORY: /home/username/ruby/gems/bin
   - RUBYGEMS PLATFORMS:
     - ruby
     - x86_64-linux
   - GEM PATHS:
      - /home/username/ruby/gems
      - /usr/local/ruby2.0/lib64/ruby/gems/
   - GEM CONFIGURATION:
      - :update_sources => true
      - :verbose => true
      - :backtrace => false
      - :bulk_threshold => 1000
      - "gem" => "--remote --gen-rdoc --run-tests"
      **- "gemhome" => "/home/username/ruby/gems"**
      - "gempath" => ["/home/username/ruby/gems", "/usr/local/ruby2.0/lib64/ruby/gems/"]
      - "rdoc" => "--inline-source --line-numbers"
   - REMOTE SOURCES:
      - https://rubygems.org/

Archivo .htaccess actualizado con las siguientes líneas:

SetEnv GEM_HOME /usr/local/ruby2.0/lib64/ruby/gems/
SetEnv GEM_PATH /home/username/ruby/gems:/usr/local/ruby20/lib64/ruby/gems/:/home/username/ruby/gems:/usr/

0

Para mí, el problema era asociar RVM Ruby con Passenger. Entonces necesitaba integrar RVM ruby ​​wrapper al archivo de configuración del pasajero.

Encuentro la ruta rvm ruby ​​wrapper con el comando:

passenger-config --ruby-command

Tomé la ruta del resultado e ingresé a una configuración de pasajero en nginx/passenger.conf:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/rvm/gems/ruby-2.3.1/wrappers/ruby;

0

He solucionado ese problema creando un proyecto de rieles de prueba e instalando todas las gemas, luego he reemplazado mi Gemfile.lock actual con la prueba y todo funciona bien.

Creo que este problema se debe a las bundlerversiones con alojamiento, así que asegúrese de que el paquete de alojamiento sea la misma versión con su proyecto.


0

En mi situación, era cuestión de permisos:

 sudo chmod -R +777 <your_folder_path>

-1: nunca coloque 777 en archivos o directorios. Si hay una división entre "propietario", "grupo" y "otros", es porque es un asunto de seguridad.
Florian Doyen

0

La versión de ruby ​​que se usó phusion passenger se diferencia con su aplicación de rieles.

<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/passenger-6.0.2
  PassengerDefaultRuby /usr/local/rbenv/versions/2.5.3/bin/ruby
</IfModule>

Asegúrese de que la versión en httpd config sea la misma con la aplicación rails.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.