Entrando no desenvolvimento Rails, você pode tropeçar em 3 caminhos diferentes:
Linux
[ $PATH
variável ambiental]
~❯ echo $PATH
/home/lakesare/.rvm/gems/ruby-2.2.1/bin:
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/sbin:
/bin:...
é uma : – lista dividida de caminhos absolutos de diretórios com binários, por exemplo, ls
binários. que você pode chamar sem mencionar o caminho absoluto. gostar
~❯ rails
e, se funcionar, há um binário rails em um desses caminhos. no caso de fora, em
~❯ whereis rails
rails: /home/lakesare/.rvm/gems/ruby-2.2.1/bin/rails
Rubi
[ $LOAD_PATH
variável global]
[1] irb(main)> $LOAD_PATH
=> ['/home/lakesare/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0', ...]
Rubygems sobrescreve . Rubygems gem está incluído na biblioteca padrão desde o Ruby 1.9. Quando você liga , isso é o que acontece:Kernel.require
require 'a'
O arquivo pode ser carregado do caminho de carregamento Ruby existente?
sim -> está carregado.
não -> as gemas instaladas são procuradas por um arquivo (em / lib) que corresponda. se for encontrado na gema ‘b’, essa gema é adicionada ao caminho de carregamento (ativado).
Trilhos
[ método rails]autoload_paths()
é usado para autoload constantes.
module A::B
C # Module.nesting => [A::B]
end
quando Ruby vê constante C
, para resolvê-lo, ele olha em:
Cada entrada em
Module.nesting
Cada entrada em
Module.nesting.first.ancestors
Cada entrada em if é nula ou um módulo.
Object.ancestors
Module.nesting.first
quando Rails vê constante C
, para resolvê-lo, Rails:
olha em todos os lugares que Ruby olha.
se não for encontrado, liga
A::B.const_missing("C")
. Rails então:- Procura em autoload_paths por a / b / c.rb
Se um arquivo correspondente for encontrado, ele será carregado:
- Se a constante correta for definida, ela será retornada
- Caso contrário, um erro é gerado
Se nenhum arquivo correspondente for encontrado, ele procura
A::C
, entãoC
, a menos que já estejam definidosSe nenhuma das constantes candidatas puder ser carregada, isso gerará um
NameError