Je configure Rails 4 application avec Ruby 2.0, mais j'obtiens "L'application Web ne peut pas être démarrée" et j'obtiens cette trace:
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>'
Mon Apache2.conf est:
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
est:
Bundler version 1.3.5
Ruby -v
est:
Ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
gem env
est:
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
est:
/usr/lib/Ruby/gems/1.8:/usr/lib/Ruby/gems/1.8
GEM_PATH
ne devrait-il pas être /usr/lib/Ruby/gems/2.0
?
À l'intérieur de l'hôte virtuel dans Apache2.conf, j'ai ajouté:
SetEnv GEM_HOME /usr/lib/Ruby/gems/1.8
Et maintenant ça marche.
Est-ce la bonne façon de résoudre ce problème?
Il se peut qu’un précédent Ruby env ait été installé sur votre système avant l’installation de la version 2.0? Cela aurait pu avoir un GEM_PATH existant qui mène au répertoire /1.8 que l’installation de la version 2.0 a simplement gardé.
Le problème que vous aviez probablement, alors, était que Passenger/Apache cherchait dans le répertoire /2.0 alors que les gemmes se trouvaient dans le répertoire /1.8. Votre demande explicite à Apache d'utiliser le répertoire /1.8 a donc du sens pour résoudre le problème.
SetEnv GEM_HOME /usr/lib/Ruby/gems/1.8
Vous pouvez également essayer d'utiliser Ruby Version Manager pour gérer plusieurs envois Ruby.
Certaines choses que j'ai trouvées dans Google:
J'ai eu presque exactement la même erreur, et j'ai pu résoudre ce problème simplement en lançant:
gem install bundler
Il est possible que votre installation de bundle soit corrompue ou manquante - c'est ce qui s'est passé dans mon cas. Notez que si ce qui précède échoue, vous pouvez essayer:
Sudo gem install bundler
... mais généralement vous pouvez le faire sans Sudo.
Il est fort probable que plusieurs Ruby soient installés.
Si vous utilisez RVM, vous devez probablement exécuter:
rvm use system
définir la version de Ruby à utiliser.
Voir http://rvm.io/rubies/default
Ruby -v
vous dira la version que vous utilisez actuellement.
Vous pouvez essayer de courir:
bundle exec rake Rails:update:bin
Comme @Dinesh mentionné dans Rails 5:
Rails app:update:bin
Dans mon cas, les lignes ajoutées au fichier de configuration Apache après l’installation de passagers sont les suivantes:
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
Mais l'application nécessite Ruby 2.0.0, donc cela m'a pris un certain temps, mais finalement, l'erreur a été résolue après avoir spécifié un chemin différent à l'aide de 'PassengerRuby' ci-dessous, dans le fichier de configuration de l'hôte virtuel Apache pour l'application:
...
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...
J'ai eu cette erreur dans une nouvelle application Rails avec bundle correctement installé. Commenter la gemme de printemps dans Gemfile a résolu le problème.
j'ai eu le même problème et j'ai essayé toutes les réponses sans aucune chance.
étapes que j'ai faites pour reproduire:
rvm instal 2.1.10
rvm gemset create my_gemset
rvm use 2.1.10@my_gemset
bundle install
cependant bundle install
a installé Rails, mais j'ai toujours cannot load such file -- bundler/setup (LoadError)
enfin en cours d'exécution gem install Rails -v 4.2
corrigé
J'ai rencontré le même problème, mais je pense que c'était à cause de spring
la mise en cache de gemmes et de configurations. Je l'ai corrigé en exécutant gem pristine --all
.
Cela restaure les gemmes installées dans un état impeccable à partir des fichiers situés dans le cache des gemmes.
NOTE: Mon hébergeur est Site5.com et j'ai un VPS géré.
J'ai ajouté des variables env pour GEM_HOME et GEM_PATH au fichier .htaccess de mon répertoire public_html (un alias du répertoire public de l'application Rails).
Ils n'étaient pas nécessaires auparavant, alors quelque chose a dû changer du côté des hôtes. Il a eu cette erreur après avoir touché le fichier restart.txt pour redémarrer le serveur de passagers.
GEM_PATH obtenu par:
echo $ GEM_PATH
Vous avez le GEM_HOME par:
bijou 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/
Fichier .htaccess mis à jour avec les lignes suivantes:
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/
Version Bundler peut-être causer le problème.
Veuillez installer le bundler avec un autre numéro de version.
Par exemple,
gem install bundler -v 1.0.10
Autre situation possible: plusieurs utilisateurs sont définis dans votre environnement de serveur. Dans ce cas, en cours d'exécution
passenger-config --Ruby-command
vous donnera la commande nécessaire pour spécifier votre fichier nginx/sites-enabled/relevant_application
avec votre cas d'utilisation, exemple:
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
Pour moi, le problème était d’associer RVM Ruby à Passenger. Il me fallait donc intégrer RVM Ruby wrapper au fichier de configuration du passager.
Je découvre rvm Ruby chemin du wrapper avec la commande:
passenger-config --Ruby-command
J'ai pris le chemin du résultat et suis entré dans une configuration de passager dans 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;
J'avais ceci parce que quelque chose de mauvais était dans mon vendor/bundle
. Rien à voir avec Apache, juste en développement local env.
Pour résoudre ce problème, j'ai supprimé vendor\bundle
, ainsi que la référence à celle-ci dans mon .bundle/config
afin qu'il ne soit pas réutilisé.
Ensuite, j'ai ré-empaqueté (qui a ensuite installé GEM_HOME
au lieu de vendor/bundle
et le problème a disparu.
Cela se passait dans l'environnement de production pour moi.
rm /vendor/bundle
alors bundle install --deployment
résolu le problème.
J'ai résolu ce problème en créant test Rails projet et en installant toutes les gemmes, puis j'ai remplacé mon fichier Gemfile.lock actuel par le test et tout fonctionne correctement.
Je pense que ce problème provient de bundler
versions avec hébergement. Assurez-vous donc que le bundle d’hébergement est la même version que votre projet.
Dans ma situation, il s'agissait des autorisations:
Sudo chmod -R +777 <your_folder_path>