Ruby 'exiger' erreur: impossible de charger le fichier
J'ai un fichier principal.rb avec le contenu suivant:
require "tokenizer.rb"
Le tokenizer.rb fichier est dans le même répertoire et son contenu est:
class Tokenizer
def self.tokenize(string)
return string.split(" ")
end
end
Si j'essaie de le lancer principal.rb j'obtiens l'erreur suivante:
C:\Documents and Settings\my\src\folder>ruby main.rb
C:/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- tokenizer.rb (LoadError)
from C:/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require '
from main.rb:1:in `<main>'
Je viens de remarquer que si j'utilise load
au lieu de require
tout fonctionne bien. Quel peut être le problème ici?
- Question connexe: stackoverflow.com/questions/2900370/...
- Vérifier que le fichier a
.rb
extension
Vous devez vous connecter pour publier un commentaire.
J'ai juste essayé et il fonctionne avec
require "./tokenizer"
. Espérons que cette aide.require_relative
comme je l'ai fait dans ma réponse.Viens de le faire:
Si vous le mettez dans un fichier Ruby qui est dans le même répertoire que
tokenizer.rb
, cela fonctionnera très bien quel que soit votre répertoire de travail courant (MDC) est.Explication de pourquoi c'est la meilleure façon
Autres réponses demande, vous devriez utiliser
require './tokenizer'
, mais c'est le mal de réponse, car il ne fonctionnera que si vous exécutez votre Ruby processus dans le même répertoire quetokenizer.rb
est dans. À peu près la seule raison de considérer l'aiderequire
comme cela serait si vous avez besoin de soutien Ruby 1.8, qui n'a pasrequire_relative
.La
require './tokenizer'
réponse pourrait travailler pour vous aujourd'hui, mais il limite inutilement la façon dont vous pouvez exécuter votre code Ruby. Demain, si vous souhaitez déplacer vos fichiers vers un autre répertoire, ou simplement pour démarrer votre Ruby processus à partir d'un autre répertoire, vous aurez à repenser l'ensemble de cesrequire
consolidés.À l'aide de
require
pour accéder aux fichiers qui sont sur le chemin de chargement est une belle chose, et les gems Ruby de le faire tout le temps. Mais il ne faut pas commencer l'argument derequire
avec un.
sauf si vous faites quelque chose de très spécial et de savoir ce que vous faites.Lorsque vous écrivez du code qui fait des hypothèses au sujet de son environnement, vous devriez penser attentivement à ce que les hypothèses à faire. Dans ce cas, il existe trois façons différentes d'exiger la
tokenizer
fichier, et chacun fait une autre hypothèse:require_relative 'path/to/tokenizer'
: Suppose que le chemin relatif entre les deux Rubis fichiers source reste la même.require 'path/to/tokenizer'
: Suppose quepath/to/tokenizer
est à l'intérieur de l'un des répertoires du chemin de chargement ($LOAD_PATH
). Cela requiert généralement d'installation supplémentaire, puisque vous avez à ajouter quelque chose pour le chemin de chargement.require './path/to/tokenizer'
: Suppose que le chemin relatif depuis le Rubis du processus de répertoire de travail en cours àtokenizer.rb
va rester la même.Je pense que pour la plupart des gens et la plupart des situations, les hypothèses formulées dans les options #1 et #2 sont plus susceptibles de détenir vrai au fil du temps.
Ruby 1.9 a supprimé le répertoire courant de la charge chemin, et vous aurez donc besoin de faire un parent sur ce fichier, comme David Grayson dit:
Il n'y a pas besoin de suffixe avec
.rb
, comme le Rubis est également assez intelligent pour savoir qu'est ce que tu veux dire, de toute façon.Ruby 1.9 has removed the current directory from the load path
? Qu'est-ce que ce répertoire courant et le répertoire de chargement ? Merci.require_relative
. Demain, il pourrait typecd ..
et puisruby folder/main.rb
et être triste votre solution ne fonctionne pas plus. Je ne pense pas que l'utilisation derequire
a tout avantage ici.require_relative
(qui n'existait pas, ou je ne savais pas à ce sujet, au moment de la publication)require
charge un fichier à partir de la$LOAD_PATH
. Si vous voulez avoir besoin d'un fichier par rapport à l'exécution de fichier au lieu de l'$LOAD_PATH
, utilisezrequire_relative
.Je recommanderais,
Donné, que vous savez que le fichier est dans le même répertoire de travail.
Si vous essayez d'exiger, par rapport au fichier, vous pouvez utiliser
J'espère que cette aide.
Une autre belle petite méthode consiste à inclure le répertoire en cours dans votre chemin de chargement avec
Vous pourriez le faire glisser sur le $: ($LOAD_PATH) tableau mais unshift va l'obliger à charger votre répertoire de travail en cours avant le reste du chemin de chargement.
Une fois que vous avez ajouté votre répertoire courant dans votre chemin de chargement, vous n'avez pas besoin de garder en précisant
et peut revenir en arrière à l'aide de
Cela fonctionne bien si elle est dans un bijou lib et c'est le tokenizer.rb
J'ai utilisé jruby-1.7.4 pour compiler mon code ruby.
est le code qui a jeté l'erreur ci-dessous.
J'ai enlevé rb de besoin et a donné
Il a bien fonctionné.
Le problème est que
require
ne pas charger à partir du répertoire courant. C'est ce que je pensais aussi, mais ensuite, j'ai trouvé ce fil. Pour exemple, j'ai essayé le code suivant:Comme il peut être vu lire le fichier ok, mais je ne pourrait pas exiger qu'il (le chemin n'était pas reconnu). et voici le code qui fonctionne:
Comme vous pouvez le voir si vous spécifiez le chemin d'accès complet du fichier à charger correctement.
Première :
Et,vous devez entrer votre mot de passe
Alors :
Apparaissent
La mise à jour de rubygems-mise à jour
ERREUR: lors de l'exécution de bijou ... (OpenSSL::SSL::SSLError)
nom d'hôte "gems.ruby-china.org" ne correspond pas au certificat de serveur
Alors:
Dernier
Quelle langue voulez-vous utiliser?? [ Swift /ObjC ]
Vous souhaitez inclure une démo de l'application avec votre bibliothèque? [ Oui /Non ]
Qui infrastructures de test allez-vous utiliser? [ Mar /Kiwi /None ]
Aimeriez-vous faire en fonction des tests? [ Oui /Non ]
Qu'est-ce que votre préfixe de classe?
De course de pod installer sur votre nouvelle bibliothèque.
Pour ceux qui sont absolument sûr de leur parent, le chemin d'accès est correct, mon problème est que mes fichiers n'ont pas la
.rb
extension! (Même si j'ai utiliséRubyMine
pour créer les fichiers et sélectionné qu'ils étaientRuby
fichiers sur la création.)Double vérifier les extensions de fichier dans votre dossier!
Ce sujet, y compris le répertoire courant dans le chemin de recherche?
vous devez donner le chemin d'accès.
Au moins vous devez donner le chemin d'accès du répertoire en cours. Il va travailler pour vous.
./nom de fichier