Pergunta

Aqui está uma pergunta mais novato:

require 'tasks/rails'

Eu vi essa linha em Rakefile no caminho raiz de cada projeto trilhos. Eu acho que essa linha é usada para exigir vendor / rails / railties / lib / tarefas / rails.rb para obter todas as tarefas rake carregada:

$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 }

A minha pergunta é por isso que é especificado apenas 'tarefas / rails' para o método exige, mas não o caminho completo do arquivo?

Agradecemos antecipadamente.

Foi útil?

Solução

Quando começa os seus rails app corre configuração boot.rb que chamadas Rails::Initializer.set_load_path e thatsets o $LOAD_PATH.

Ruby usa essa lista de diretórios para encontrar os arquivos especificados em uma linha require. Se você dar-lhe um caminho absoluto como require '/home/lolindrath/ruby/lib.rb' ele vai pular essa pesquisa.

Este é aproximadamente análogo ao #include <stdlib.h> em C / C ++, onde ele procura o caminho incluem você dá o compilador para encontrar esse arquivo de cabeçalho.

Outras dicas

Eu acredito porque seus caminhos são criados em seu arquivo /config/environment.rb:

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

Claro. Em /config/boot.rb (chamado em environment.rb) a RAILS_ROOT é configurada assim:

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

que lhe permite exigir coisas da raiz eu acredito. Esperança essa é a resposta de qualquer maneira!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top