2010-09-21 10 views
6

Estoy tratando de incluir un archivo de código fuente cuando ejecuto irb pero irb no puede encontrarlo.directorio predeterminado Rails irb

Por ejemplo, dicen que estoy en el directorio siguiente en el terminal:

/dan/rubyapp/ 

Supongamos que tengo un archivo llamado "firstapp.rb" en/dan/rubyapp/

I puesta en marcha y desde IRB el indicador de irb teclee

> require "firstapp.rb" 

pero no se puede encontrar el archivo. Si escribo "Dir.pwd" se muestra como

/dan/rubyapp/ 

La única manera que puedo conseguir "requerir" a trabajar es si incluyo la ruta completa al igual que

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

es que la única manera Puedo hacer que esto funcione? Todos los tutoriales que veo en línea simplemente requieren "require file_name", así que supuse que funcionaría.


aquí es la salida de $: en el 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"] 

Respuesta

2

Un par de cosas para probar:

1) La caída de la .rb desde el final de su requeriría por lo que tiene:

require 'firstapp' 

normalmente no agrega el .rb a un require (sólo para una carga) - echar un vistazo aquí para más detalles: http://www.fromjavatoruby.com/2008/10/require-vs-load.html

2) De no ser así, asegúrese de que el directorio actual es en su camino de carga - en el IRB ejecutar:

p $: 

y va a imprimir su ruta de carga rubí - comprobar si hay una entrada para". " (la mía es la última entrada)

+1

está haciendo" $ LOAD_PATH << '.' "en mi .irbrc la mejor manera de hacer esto? – iljkj

+0

Así que no está allí? Podría mostrar su salida de p $: – Ash

+0

Lo siento, se perdió este comentario. Pero sí. no estaba allí. Tuve que agregarlo manualmente a mi archivo .irbc a través de "$ LOAD_PATH << '.'". Publicaré cómo se veía mi $: antes de agregarlo en una edición a mi pregunta. – iljkj

7

El problema es que el directorio de trabajo actual ya no está en su camino (a partir de Ruby 1.9.2). Hay algunas formas diferentes de resolver el problema.

1) En un archivo ruby ​​en sí mismo, puede usar el método require_relative en lugar de require. Esto cargará un archivo con respecto a la loaction del archivo que contiene el método require_relative: http://extensions.rubyforge.org/rdoc/classes/Kernel.html

require_relative 'firstapp.rb' 

Esto, sin embargo, no funciona en IRB.

2) Su otra opción es incluir la ruta actual en su argumento al método require. Esto funcionará en irb o en un archivo ruby. Por ejemplo:

require './firstapp.rb' 

La razón de que esto se implementó en Ruby era para evitar inadvertidamente que requiere el archivo incorrecto si hay diferentes archivos con el mismo nombre en diferentes directorios de la vía (similar a la forma en * nix no incluye la directorio actual "."en su camino)

+1

Esto me ayudó! Para que el mío funcione, sin embargo, tuve que usar una barra inclinada, por lo que 'require './firstapp.rb'' sería más apropiado. –

Cuestiones relacionadas