2010-09-21 5 views
6

J'essaie d'inclure un fichier de code source quand je lance irb mais irb est incapable de le trouver.Rails irb répertoire par défaut

Par exemple, dire que je suis dans le répertoire suivant dans le terminal:

/dan/rubyapp/ 

Supposons que j'ai un fichier nommé "firstapp.rb" dans/dan/rubyapp/

I démarrage et de RIR l'invite irb je tape

> require "firstapp.rb" 

mais le fichier ne peut pas être trouvé. Si je tape « Dir.pwd » il montre que

/dan/rubyapp/ 

La seule façon que je peux obtenir « exiger » de travailler est si je le parcours complet comme si

> require "/dan/rubyapp/firstapp.rb" 

est que la seule façon Je peux obtenir cela pour travailler? Tous les tutoriels que je vois en ligne font simplement "require file_name" donc j'ai supposé que cela fonctionnerait.


ici est la sortie de $: à irb

ruby-1.9.2-p0 > $: 
=> ["/Users/Daniel/.rvm/gems/ruby-1.9.2-p0/gems/wirble-0.1.3/bin", 
"/Users/Daniel/.rvm/gems/ruby-1.9.2-p0/gems/wirble-0.1.3/lib", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby/1.9.1", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.4.0", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby/1.9.1", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.4.0", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1",  
"/Users/Daniel/.rvm/rubies/ruby- 
1.9.2-p0/lib/ruby/1.9.1/x86_64-darwin10.4.0"] 

Répondre

2

Un couple de choses à essayer:

1) Laissez tomber le .rb de la fin de votre besoin et vous avez:

require 'firstapp' 

Vous n'ajoutez pas normalement le .rb à un besoin (seulement à une charge) - un coup d'oeil ici pour plus de détails: http://www.fromjavatoruby.com/2008/10/require-vs-load.html

2) A défaut, assurez-vous que le répertoire en cours est sur votre chemin de charge - en irb exécuter:

p $: 

et il affichera votre chemin de charge rubis - vérifier une entrée pour ». " (le mien est la dernière entrée)

+1

fait" $ LOAD_PATH << '.' "dans mon .irbrc la meilleure façon de le faire? – iljkj

+0

Donc n'est pas là-dedans? Pourriez-vous montrer votre sortie de p $: – Ash

+0

Désolé, J'ai raté ce commentaire, mais oui, le. n'était pas là, je devais le rajouter manuellement dans mon fichier .irbc via "$ LOAD_PATH << '.'". Je posterais ce que mon $: ressemblait avant de l'ajouter dans un edit à ma question – iljkj

7

Le problème est que le répertoire de travail actuel n'est plus dans votre chemin (à partir de Ruby 1.9.2). Il y a plusieurs façons de contourner le problème.

1) Dans un fichier ruby ​​lui-même, vous pouvez utiliser la méthode require_relative au lieu de require. Cela va charger un fichier par rapport au loaction du fichier contenant la méthode require_relative: http://extensions.rubyforge.org/rdoc/classes/Kernel.html

require_relative 'firstapp.rb' 

Ceci, cependant, ne fonctionne pas dans RIR.

2) Votre autre option consiste à inclure le chemin courant dans votre argument à la méthode require. Cela fonctionnera dans irb ou dans un fichier ruby. Par exemple:

require './firstapp.rb' 

La raison pour laquelle cela a été mis en œuvre en Ruby était d'éviter d'exiger, par inadvertance, le mauvais fichier si des fichiers différents avec le même nom dans différents répertoires du chemin (similaire à la façon dont * nix ne comprend pas répertoire actuel "."dans son chemin)

+1

Cela m'a aidé! Pour le mien de travailler, cependant, j'ai dû utiliser une barre oblique, donc 'require './firstapp.rb'' serait plus approprié. –

Questions connexes