Вопрос

Вот еще один вопрос новичка:

require 'tasks/rails'

Я видел эту строку в Rakefile в корне каждого проекта Rails.Я предполагаю, что эта строка используется для того, чтобы потребовать от поставщика/rails/railties/lib/tasks/rails.rb загрузить все 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 }

Мой вопрос: почему для метода require указывается только «tasks/rails», а не полный путь к файлу?

Заранее спасибо.

Это было полезно?

Решение

Когда вы запускаете приложение rails, оно запускает config / boot.rb, который вызывает Rails::Initializer.set_load_path и устанавливает $LOAD_PATH.

Ruby использует этот список каталогов для поиска файлов, указанных в строке require. Если вы укажете абсолютный путь, например require '/home/lolindrath/ruby/lib.rb', поиск будет пропущен.

Это примерно аналогично #include <stdlib.h> в C / C ++, где он ищет путь включения, который вы даете компилятору, чтобы найти этот заголовочный файл.

Другие советы

Я полагаю, потому что ваши пути настроены в вашем файле /config/environment.rb:

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

Конечно.В /config/boot.rb (вызываемом в Environment.rb) RAILS_ROOT настроен следующим образом:

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

Я считаю, что это позволяет вам требовать что-то из корня.Надеюсь, это все-таки ответ!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top