web-dev-qa-db-fra.com

'require': impossible de charger un tel fichier - 'nokogiri \ nokogiri' (LoadError) lors de l'exécution de 'Rails server`

J'exécute une nouvelle installation de Ruby 2.2.1 sous Windows 8.1 avec DevKit. Après l'installation, j'exécute:

gem install Rails
rails new testapp
cd testapp
Rails server

laissant tout le reste par défaut.

Le processus échoue à la dernière ligne lorsque, au lieu d’exécuter le serveur, j’obtiens le message d’erreur

in 'require': cannot load such file -- 'nokogiri\nokogiri' (LoadError)

Cela se produit à chaque fois et j'ai regardé autour de moi et essayé tout ce que j'ai trouvé pour le réparer, mais rien n'a fonctionné jusqu'à présent.

Quel est le problème ici et comment puis-je obtenir un test simple Rails app au travail?)

59
Shef

Nokogiri ne prend pas encore en charge Ruby 2.2 sous Windows. La prochaine version en sera. Voir https://github.com/sparklemotion/nokogiri/issues/1256

Nokogiri ne prend pas en charge les versions natives (par exemple avec devkit) sous Windows. Au lieu de cela, il fournit des gemmes contenant des DLL prédéfinies.

Il est possible de participer ou de suivre une discussion sur le sujet du support de devkit build ici: https://github.com/sparklemotion/nokogiri/issues/119

63
Mike Dalessio
  1. Tout d’abord, désinstallez la version de Nokogiri que vous avez actuellement avec:

    gem uninstall nokogiri
    
  2. Télécharger Nokogiri 1.6.6.2 (x64) ou Nokogiri 1.6.6.2 (x86)

  3. Installez cette version localement en utilisant:

    gem install --local C:\Users\$user$\Downloads\nokogiri-1.6.6.2-x64-mingw32.gem
    

    ou si vous utilisez Ruby 32bit:

    gem install --local C:\Users\$user$\Downloads\nokogiri-1.6.6.2-x86-mingw32.gem
    

    Le chemin peut différer selon l'endroit où vous avez téléchargé le fichier.

Essayez de redémarrer le serveur en utilisant Ruby bin\Rails server, et ça devrait marcher.

38
Julio Elixir

Nokogiri fonctionnait avec Ruby 2.2 sur Windows 10 avec un mélange de Mike Dalessios et Julios qui répondent à la question suivante:

  1. Recherchez la dernière version de Nokogiri dans dépôt github de Nokogiri .
  2. Courir gem uninstall nokogiri.
  3. Ajouter gem "nokogiri", ">= 1.6.7.rc" à votre Gemfile.
  4. Courir bundle install.
  5. Courir bundle update nokogiri si bundle a verrouillé Nokogiri à une version.
33
Pascal

enter image description here

Réparer

  1. Installation groupée (récupère les fichiers Nokogiri)
  2. Accédez à Ruby_dir\lib\Ruby\gems\2.2.0\gems\nokogiri-1.6.6.2\ext\nokogiri
  3. Ouvrez extconf.rb
  4. Ajouter dir_config('iconv').any? or pkg_config('libiconv') à #376
  5. Télécharger les dossiers MinGW64 & MSYS depuis Mega
  6. Ajoutez-les à PATH dans Windows (supprimez les références de chemin Devkit - cela ne fonctionne pas)
  7. Télécharger libxml2, libxslt, iconv bibliothèques (ou ici )
  8. Exécuter Ruby extconf.rb --platform=Ruby --n --use-system-libraries En référençant les bibliothèques téléchargées
  9. Exécuter make
  10. Exécuter make install

Pas

Installation groupée

La première étape consiste à bundle.

Cela mettra la gemme nokogiri sur votre machine sans exécuter le compilateur pré-packagé (qui ne fonctionne généralement pas sous Windows).

Cela montrera Nokogiri comme installé:

enter image description here

Parcourir

Accédez au dossier nokogiri pour trouver ext/nokogiri/extconf.rb:

enter image description here

Ouvrez extconf.rb

... et ajoutez dir_config('iconv').any? or pkg_config('libiconv') à #376

enter image description here

Nokogiri standard installe "compter" sur l'inclusion libxml2 De iconv - nous devons le définir explicitement, sinon des erreurs iconv.h is missing Se produiront.

Ajouter une chaîne d'outils

N'utilisez pas devkit pour cela - cela ne fonctionne pas.

Vous avez besoin de MinGW:

enter image description here

J'ai compressé mes dossiers exacts MinGW64 Et MSYS64sur Mega (clé: !FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA):

enter image description here

Ajouter à PATH

Cela donne accès à gcc & make (les deux requis):

enter image description here

Supprimez la référence devkit de votre chemin et ajoutez ce qui suit:

  • MINGW64_PATH/bin
  • MSYS64_PATH/bin

Téléchargez les libs

J'ai ajouté les bibliothèques à Mega:

enter image description here

Vous allez les décompresser ici:

enter image description here

Toutes les bibliothèques proviennent de cette source .

Exécuter extconf.rb

Une fois que les bibliothèques sont sur votre système, vous pouvez exécuter Ruby extconf.rb Pour configurer la construction:

enter image description here

32bit

Ruby extconf.rb --platform=Ruby -N -- --use-system-libraries --with-xml2-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxml2-2.9.2-win32-x86 --with-xml2-include=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxml2-2.9.2-win32-x86/include/libxml2 --with-iconv-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/iconv-1.14-win32-x86 --with-xslt-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxslt-1.1.28-win32-x86

64bit

#64 Ruby extconf.rb --platform=Ruby -N -- --use-system-libraries --with-xml2-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxml2-2.9.2-win32-x86_64 --with-xml2-include=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxml2-2.9.2-win32-x86_64/include/libxml2 --with-iconv-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/iconv-1.14-win32-x86_64 --with-xslt-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxslt-1.1.28-win32-x86_64

make

enter image description here

Cela peut créer des erreurs/des avertissements, tant qu'il est écrit "Error 1 (ignored)", ça devrait aller.

Ensuite, utilisez make install:

enter image description here

Ensuite, accédez à votre installation Rails et exécutez Rails s:

enter image description here


Explication

Pour donner un contexte:

Ruby 2.2+ sur Windows ne compile pas les extensions Nokogiri requis.

Les extensions d'une gem sont les dépendances supplémentaires (bibliothèques) qu'il utilise.

Ils sont construits quand vous installez le joyau:

enter image description here


Extensions

Le manque d'extensions empêche Nokogiri de fonctionner.

Les extensions existent dans le dossier ext d’une gemme ( vous pouvez en savoir plus ici ):

enter image description here

Mysql2, RMagick, PGSQL, Nokogiri etc tous utilisez des extensions/bibliothèques.

C'est pourquoi - sous Windows - vous devez utiliser des commutateurs personnalisés (--with-opt-dir) Lors de l'installation de la gem. Cela donne les répertoires Ruby/le shell/(cmd)] requis lib/include nécessaires à la création des fichiers de la gem (c'est l'équivalent). de comment PATH fonctionne).

Sur Linux/Mac, ces répertoires sont gérés avec les gestionnaires de packages respectifs (brew/apt-get). Windows ne l’a pas, vous devez donc installer les extensions manuellement.

Comme Windows ne dispose pas d’un ensemble standard de bibliothèques, vous devez les télécharger vous-même. Vous devez également construire vous-même (ce qui est délicat).

Le correctif pour l’installation de Nokogiri consiste à utiliser les bonnes bibliothèques et à créer des outils pour installer la gemme.


Construire

La différence avec Ruby 2.2+ est que la gemme va "s'installer" sans indiquer d'exception. Vous pensez qu'elle est installée, seulement pour trouver Rails ne charge pas (d'où l'erreur nokogiri/nokogiri.so).

Cela signifie que vous devez vous assurer que vous avez les fichiers sur votre système et exécuter le compilateur pour les installer.

La documentation ci-dessus devrait vous montrer comment faire cela.

6
Richard Peck