não pode carregar esse arquivo - bundler / setup (LoadError)

128

Estou configurando o aplicativo Rails 4 com Ruby 2.0, mas estou obtendo "O aplicativo da Web não pôde ser iniciado" e obtém esse rastreamento:

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>'

Meu apache2.conf é:

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 é:

Bundler version 1.3.5

ruby -v é:

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

gem env é:

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 é:

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

Não deveria GEM_PATHser /usr/lib/ruby/gems/2.0?

Dentro do host virtual no apache2.conf, adicionei:

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

E agora está funcionando.

É o caminho certo para corrigir isso?

Mr_Nizzle
fonte

Respostas:

49

Pode ser que houvesse um ambiente anterior do Ruby instalado no seu sistema antes da instalação do 2.0? Isso pode ter um GEM_PATH existente que leva ao diretório /1.8 que a instalação da versão 2.0 simplesmente mantinha.

O problema que você provavelmente tinha, então, era que o Passenger / Apache estava procurando no diretório /2.0 quando, na verdade, os gems estavam no diretório /1.8. Seu explicitamente dizendo ao apache para usar o diretório /1.8 faz sentido para corrigir o problema.

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

Você também pode tentar usar o Ruby Version Manager para lidar com vários envs do Ruby.

Algumas coisas que encontrei no Google:

robmclarty
fonte
202

Eu tive quase exatamente o mesmo erro e pude corrigi-lo completamente simplesmente executando:

gem install bundler

É possível que a instalação do bundler esteja corrompida ou ausente - foi o que aconteceu no meu caso. Observe que, se o acima falhar, você pode tentar:

sudo gem install bundler

... mas geralmente você pode fazer isso sem o sudo.

Andrew Faulkner
fonte
2
Este era eu! Pergunta - é sudorealmente necessário? Eu usei, sudomas agora estou me perguntando o que teria acontecido se não tivesse.
Pete
2
Se você estiver usando uma versão diferente do Ruby que a padrão do sistema, NÃO precisará usar sudo! sudo gem ....instalará a defaultversão da gem e (no meu caso, Ubuntu 14.04) sudonão pode executar o rvm.
Farfromunique
1
No meu sistema macOS, eu precisava sudodo ruby ​​padrão do sistema, mas não precisava de nenhuma versão do ruby ​​que eu instalei com o rvm.
Ben Visness 13/06
1
Apenas uma observação para dizer que esta foi a solução para mim usando o Windows Subsystem para Linux, após a recente atualização do Windows. Por alguma razão, a atualização acabou com a instalação do meu ruby ​​RVM.
Ben Fulton
1
Oi, Estou com o mesmo problema que a pergunta usando o ubuntu gem 2.7.6e ruby 2.5.0p0o que fazer?
TheCrazyProfessor
28

Você provavelmente tem mais de um Ruby instalado.

Se você estiver usando o RVM, provavelmente precisará executar:

rvm use system

para definir a versão do ruby ​​a ser usada.

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

ruby -v

dirá a versão que você está usando no momento.

Michael Guild
fonte
25

Você pode tentar executar:

bundle exec rake rails:update:bin

Como o @Dinesh mencionado no Rails 5:

rails app:update:bin
zolter
fonte
10

No meu caso, as linhas anexadas ao arquivo de configuração do apache após a instalação do passageiro foram as seguintes:

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

Mas o aplicativo requer Ruby 2.0.0, então demorei um pouco, mas finalmente, o erro foi resolvido após a especificação de um caminho diferente usando 'PassengerRuby' abaixo, no arquivo de configuração do host virtual Apache para o aplicativo:

...
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...
user2997993
fonte
Este foi o meu caso também. No meu caso, PassengerDefaultRubyestava se referindo a uma instalação antiga de ruby.
Waseem
8

Eu recebi esse erro em um aplicativo Rails novo com o pacote instalado corretamente. Comentar a jóia da primavera no Gemfile resolveu o problema.

nachbar
fonte
4
Era isso para mim, mas em gem install springvez de comentar.
jakenberg
3

Corri para o mesmo problema, mas acho que foi devido ao springcache de algumas gemas e configurações. Corrigi-o executando gem pristine --all.

Isso restaura as gemas instaladas em perfeitas condições a partir dos arquivos localizados no cache da gema.

ou você pode apenas tentar sua gema como

gem pristine your_gem_name
NM Pennypacker
fonte
1

Isso estava acontecendo no ambiente de produção para mim.

rm /vendor/bundle

então bundle install --deployment

resolveu o problema.

vanboom
fonte
1

Outra situação possível: você possui vários usuários definidos no ambiente do servidor. Nesse caso, executando

passenger-config --ruby-command

fornecerá o comando necessário para especificar seu nginx/sites-enabled/relevant_applicationarquivo com seu caso de uso, exemplo:

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
Jerome
fonte
1

Eu tive o mesmo problema e tentei todas as respostas sem sorte.

etapas que fiz para reproduzir:

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

no entanto bundle installinstalado Rails, mas eu ainda tenho cannot load such file -- bundler/setup (LoadError)

finalmente correndo gem install rails -v 4.2corrigi-lo

Sherif Elkassaby
fonte
1

A versão do Bundler pode causar o problema.

Instale o bundler com outro número de versão.

Por exemplo,

gem install bundler -v 1.0.10

hobbydev
fonte
No meu caso, esse erro ocorre após a instalação do bundler v2 . Eu resolvo isso com gem uninstall -a bundler; gem install bundler -v '<2.0'.
SergA 23/01
0

Eu tive isso porque algo ruim estava na minha vendor/bundle. Nada a ver com o Apache, apenas no ambiente de desenvolvimento local.

Para corrigir, apaguei vendor\bundlee também apaguei a referência a ele no meu, .bundle/configpara que não fosse reutilizada.

Em seguida, agrupei novamente (que foi instalado no GEM_HOMElugar do vendor/bundlee o problema foi resolvido.

thewoolleyman
fonte
0

NOTA: Minha empresa de hospedagem é Site5.com e eu tenho um VPS gerenciado.

Adicionei variáveis ​​env para GEM_HOME e GEM_PATH ao arquivo .htaccess no meu diretório public_html (um alias para o diretório público no aplicativo rails)

Eles não eram necessários antes, então algo deve ter mudado no lado do host. Ele recebeu esse erro depois de tocar no arquivo restart.txt para reiniciar o servidor de passageiros.

Obteve GEM_PATH por:

eco $ GEM_PATH

Obtenha o GEM_HOME por:

gem 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/

Arquivo .htaccess atualizado com as seguintes linhas:

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/
Rob Little
fonte
0

Para mim, o problema estava associando o RVM Ruby ao Passenger. Então, eu precisava integrar o RVM ruby ​​wrapper ao arquivo de configuração do passageiro.

Descobri o caminho do wrapper rvm ruby ​​com o comando:

passenger-config --ruby-command

Peguei o caminho do resultado e entrei em uma configuração de passageiro em 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;
Gediminas
fonte
0

Corrigi esse problema criando um projeto de trilhos de teste e instalando todas as gemas, depois substituí meu Gemfile.lock atual pelo teste e tudo funciona bem.

Eu acho que esse problema bundlerocorre nas versões com hospedagem, portanto, verifique se o bundler de hospedagem é a mesma versão do seu projeto.

hsul4n
fonte
0

Na minha situação, era questão de permissões:

 sudo chmod -R +777 <your_folder_path>
Petrov
fonte
-1: nunca coloque 777 em arquivos ou diretórios. Se houver uma divisão entre "proprietário", "grupo" e "outros", é porque é uma questão de segurança.
Florian Doyen
0

A versão da versão ruby ​​usada pelo passageiro phusion é diferenciada com o aplicativo rails.

<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>

Verifique se a versão no httpd config é a mesma com o aplicativo rails.

giapnh
fonte