Почему мой Rails.root nil?

Я пытаюсь ссылаться на Rails.root в моем приложении .rb, но это нуль, почему это?

Ответы

Ответ 1

Я могу объяснить, почему, но я не могу дать вам обходной путь.

Rails.root определяется в rails/railties/lib/rails.rb

def root
  application && application.config.root
end

В application.rb экземпляр application еще не создан, потому что определяется класс application... Приложение инициализируется после, в environment.rb:

# Load the rails application
require File.expand_path('../application', __FILE__)

# Initialize the rails application
Testapp::Application.initialize!

ИЗМЕНИТЬ

Обходной путь прямо на наших глазах:

my_rails_root = File.expand_path('../..', __FILE__)

Ответ 2

Используете ли вы Rails 3.x? Если нет, вы должны использовать RAILS_ROOT, а не Rails.root.

Ответ 3

У меня была такая же проблема, когда я пытался использовать ее перед объявлением модуля и класса. Попробуйте использовать его внутри и посмотрите, имеет ли это значение, например.

module MyApp
  class Application < Rails::Application

    puts Rails.root

  end
end