web-dev-qa-db-fra.com

Comment exiger un fichier Ruby d'un autre répertoire

J'essaie d'exiger un fichier rake que j'ai créé dans un autre fichier que j'ai. Ces deux fichiers sont dans deux répertoires différents. J'ai require au début de mon premier fichier avec le nom du second fichier entre guillemets après le require. Il me dit qu'il ne peut pas charger un tel fichier. Cela signifie-t-il parce qu'il se trouve dans un répertoire différent qu'il ne le trouve pas? J'ai essayé de coller le chemin d'accès complet au deuxième fichier, mais le fichier ne peut toujours pas être chargé. Est-ce que quelqu'un sait comment je peux charger le deuxième fichier dans le premier?

Merci d'avance

27
thedarkknight228

require recherchera les fichiers uniquement dans un ensemble d’emplacements appelé "chemin de chargement". Vous pouvez afficher le chemin de chargement à l'aide de la variable globale $LOAD_PATH dans un script ou une session irb. Si ce n'est pas dans le chemin de chargement, il ne le trouvera pas. 

Ruby 1.9 a introduit require_relative qui recherche en utilisant l'emplacement du fichier actuel comme point de départ. 

# Will search $LOAD_PATH for file. 
require 'test/unit'
# Notice the '/' which tells it to look in the 
# 'test' folder for a file named 'unit.rb'

# Will look in current folder of file
require_relative 'my_folder/my_file'
# Will search in 'my_folder' for the file 'my_file.rb'

Notez que require_relative ne fonctionnera pas dans irb. 

Notez également que si vous voulez vraiment utiliser require, vous pouvez démarrer votre script en ajoutant un emplacement à la variable $LOAD_PATH.

$LOAD_PATH << File.join('users', 'yourusername', 'your_folder')
# or
$LOAD_PATH << File.dirname(__FILE__)
# The second one enables you to move the file around on your
# system and still operate correctly
require 'my_file'

Voici une documentation supplémentaire de Ruby-Doc:

52
Charles Caldwell

De la documentation: Il suggère d'utiliser besoin de relative. Docs

require_relative complète la méthode intégrée require en vous permettant de charger un fichier relatif au fichier contenant l'instruction require_relative.

Lorsque vous utilisez require pour charger un fichier, vous accédez généralement à une fonctionnalité correctement installée et rendue accessible sur votre système. require n’offre pas une bonne solution pour charger des fichiers dans le code du projet. Cela peut être utile pendant une phase de développement, pour accéder aux données de test ou même pour accéder à des fichiers "bloqués" dans un projet, non destiné à un usage externe.

Par exemple, si vous avez des classes de tests unitaires dans le répertoire "test" et des données les concernant dans le répertoire test "test/data", vous pouvez utiliser une ligne comme celle-ci dans un scénario de test:

require_relative "data/customer_data_1"
9
Bijendra

Aussi possible de le faire:

require './something.rb'

du répertoire en cours à inclure.

8
BladeMight

Par exemple, vous avez des fichiers:

chess.rb et spec/test.rb

Et vous voulez exiger le fichier dans spec/test.rb. Utilisation: 

require_relative '../test.rb'

avec deux points. Avec un point './' vous aurez une erreur "impossible de charger un tel fichier"

0
Alexandr