2010-10-09 10 views
24

Je n'ai vraiment aucun problème avec l'importation de fichiers dans Ruby. Je fais une application Ruby dans Windows XP. Tous les fichiers de classe pour l'application sont en "C:/Documents/Prgm/Surveyor_Ruby/lib". Mais quand je require un fichier dans un autre fichier, ni ruby ​​ni irb peuvent trouver le fichier requis.Ni ruby ​​ni nor irb ne peuvent charger le fichier .rb dans le répertoire courant

Le contenu du répertoire courant:

C:\Documents\Prgm\Surveyor_Ruby\lib>dir 
Volume in drive C has no label. 
Volume Serial Number is AAAA-BBBB 

Directory of C:\Documents\Prgm\Surveyor_Ruby\lib 

10/09/2010 06:32 PM <DIR>   . 
10/09/2010 06:32 PM <DIR>   .. 
10/08/2010 03:22 PM    5,462 main (commented).rb 
10/08/2010 03:41 PM    92 question.rb 
10/08/2010 09:06 PM    2,809 survey.rb 
10/09/2010 06:25 PM    661 surveyor.rb 
10/08/2010 01:39 PM    1,546 test.rb 
       5 File(s)   10,570 bytes 
       2 Dir(s) 40,255,045,632 bytes free 

confirmation que dans le répertoire est iRB correct:

C:\Documents\Prgm\Surveyor_Ruby\lib>irb 
irb(main):001:0> Dir.pwd 
=> "C:/Documents/Prgm/Surveyor_Ruby/lib" 

... encore RIR ne peut pas charger survey.rb:

irb(main):002:0> require 'survey' 
LoadError: no such file to load -- survey 
     from <internal:lib/rubygems/custom_require>:29:in `require' 
     from <internal:lib/rubygems/custom_require>:29:in `require' 
     from (irb):2 
     from C:/Ruby192/bin/irb:12:in `<main>' 
+2

En plus de la solution supérieure, 'require './Survey'' aurait également fonctionné. Fondamentalement, votre répertoire actuel n'est pas réellement dans le chemin de recherche par défaut, vous devez donc pointer explicitement ruby ​​ou l'inclure dans le chemin de recherche. –

Répondre

2

Je crois que les deux messages précédents sont corrects, juste pour des utilisations différentes. Dans IRB, utilisez un chemin absolu avec require, avec un fichier, vous pouvez également utiliser require avec un chemin absolu ou utiliser require_relative.

9

Remarqué le même comportement, mais mes racines Linux m'avait essayer: .\file.rb et il chargé dans l'irb. Essayez de déclarer explicitement le répertoire en cours.

+0

Cela ne fonctionne que si le répertoire en cours est celui dans lequel se trouvent les deux fichiers. –

3

il est sale putain, mais vous pouvez toujours le faire à la toute première ligne:

$: << '.' 

et vous partez avec pwd'ed besoin. Il est tout à fait utile pour les tests interactifs/créatif avec la CISR

+0

Merci pour cela. Je ne sais pas pourquoi exiger ne fonctionnait pas pour moi. –

58

Aucune de ces travaillé pour moi, mais cela a fait:

irb -I . 
>require 'file' 
=> true 
+1

+1 Cela fonctionne définitivement. – WattsInABox

+0

Vérifiez également ma solution, c'est particulièrement bien quand vous n'avez pas lancé irb avec '-I .' pour définir le' pwd' comme le répertoire '$ LOAD_PATH'. – Darme

+0

Merveilleuse fonctionnalité de 'irb'! – Dan

1

Si vous essayez de le faire avec rvmsudo, j'ai trouvé cela a fonctionné pour moi :

rvmsudo irb -I '/Absolute/path/to/your/project' 
8

Que diriez-vous de cette commande? Un peu lourd à écrire, mais vraiment propre et il devrait toujours fonctionner:

 
➜ $ irb 
> require "#{Dir.pwd}/file_to_load.rb" 
=> true 
9
require './hede' 

ou

require_relative 'hede' 

Cela fonctionne pour moi dans les deux Ruby (1.9.3) et JRuby (1.7.x) sur Linux. Je ne l'ai pas testé sur Windows.

Questions connexes