2016-11-24 1 views
0

Je suis avec le problème suivant:Exigent classe avec pur Ruby

Je voudrais d'exiger un fichier « config/application.rb » à mon index.rb.

Dans ma tâche, je dois utiliser du Ruby pur.

config/application

Dir["app/models/*.rb"].each do |file| 
    require_relative file 
end 

Dir["app/importers/*.rb"].each do |file| 
    require_relative file 
end 

index.rb

require 'config/application' 

contas_endereco = ARGV[0].to_s 
transacoes_endereco = ARGV[1].to_s 

conta_arquivo = Arquivo.new(contas_endereco) 
transacoes_arquivo = Arquivo.new(transacoes_endereco) 

transacoes_importer = TransacoesImporter.new(conta_arquivo, transacoes_arquivo) 
transacoes_importer.importar 

Mais je suis arrivé cette erreur:

/home/kelvin/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- config/application (LoadError) 
    from /home/kelvin/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
    from index.rb:1:in `<main>' 

J'ai essayé d'utiliser require_relative aussi, mais je suis l'erreur suivante :

/home/kelvin/workspace-ruby/desafio-dinda/config/application.rb:2:in `require_relative': cannot load such file -- /home/kelvin/workspace-ruby/desafio-dinda/config/app/models/transacao.rb (LoadError) 
    from /home/kelvin/workspace-ruby/desafio-dinda/config/application.rb:2:in `block in <top (required)>' 
    from /home/kelvin/workspace-ruby/desafio-dinda/config/application.rb:1:in `each' 
    from /home/kelvin/workspace-ruby/desafio-dinda/config/application.rb:1:in `<top (required)>' 
    from index.rb:1:in `require_relative' 
    from index.rb:1:in `<main>' 
+2

Essayez 'require »/config/application'' –

Répondre

4

require 'config/application'

Dans Ruby, les fichiers inclus avec Kernel#require doit généralement être dans la $ LOAD_PATH ou donnés en chemins relatifs, et ne comprennent pas l'extension de nom de fichier. Quelques exemples incluent:

  • Ajoutez le répertoire du script à votre $ LOAD_PATH.

    $:.unshift File.dirname(__FILE__) 
    require 'config/application' 
    
  • Requiert un fichier relatif au répertoire de travail en cours.

    require './config/application' 
    

Vous pouvez également utiliser Kernel#load avec un chemin absolu. Par exemple:

load '/path/to/config/application.rb' 
+1

Pour plus de clarté, il est préférable d'utiliser '$ LOAD_PATH' au lieu du mystérieux' $. ', Un symbole très difficile de chercher sur Google. – tadman

+1

@tadman D'accord, mais je les ai mis tous les deux dans la réponse parce que les gens sont susceptibles de voir les deux dans la nature. :) Merci pour le commentaire! Lutter pour la lisibilité sur l'intelligence est toujours une bonne idée. –

+0

Notez que 'require'ing un fichier relatif au répertoire de travail courant est au moins * très * fragile et potentiellement * très * dangereux, puisque le répertoire de travail actuel est hors de votre contrôle. C'est la raison pour laquelle '.' ne fait pas partie du chemin de recherche par défaut sur Unix depuis plusieurs décennies, et a été retiré de' $ LOAD_PATH' dans 1.9. * Toujours * utiliser 'require_relative' qui est relatif au fichier * courant *, qui * est * sous votre contrôle. –