Pregunta

Aquí hay una pregunta más para novatos:

require 'tasks/rails'

Vi esta línea en Rakefile en la ruta raíz de cada proyecto de rails. Supongo que esta línea se usa para requerir vendor / rails / railties / lib / task / rails.rb para cargar todas las tareas de rake:

$VERBOSE = nil
# Load Rails rakefile extensions
Dir["#{File.dirname(__FILE__)}/*.rake"].each { |ext| load ext }
# Load any custom rakefile extensions
Dir["#{RAILS_ROOT}/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
Dir["#{RAILS_ROOT}/vendor/plugins/*/**/tasks/**/*.rake"].sort.each { |ext| load ext }

Mi pregunta es ¿por qué solo se especifica 'tareas / rieles' para el método require, pero no la ruta completa del archivo?

Gracias de antemano.

¿Fue útil?

Solución

Cuando inicia su aplicación rails, ejecuta config / boot.rb que llama a Rails::Initializer.set_load_path y eso configura el $LOAD_PATH.

Ruby usa esa lista de directorios para encontrar los archivos especificados en una línea require. Si le das una ruta absoluta como require '/home/lolindrath/ruby/lib.rb' se saltará esa búsqueda.

Esto es más o menos análogo a #include <stdlib.h> en C / C ++ donde busca la ruta de inclusión que le da al compilador para encontrar ese archivo de encabezado.

Otros consejos

Creo que porque sus rutas están configuradas en su archivo /config/environment.rb:

require File.join(File.dirname(__FILE__), 'boot')

Claro. En /config/boot.rb (llamado en environment.rb) RAILS_ROOT se configura así:

RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)

Lo que te permite requerir cosas desde la raíz, creo. ¡Espero que esa sea la respuesta de todos modos!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top