2010-11-21 16 views
13

Ich versuche, Rails.root in meinem application.rb zu referenzieren, aber es ist nil, warum ist das?Warum ist meine Rails.root nicht?

+0

Hat Rails bereits booten? – Reactormonk

+0

ja, es lädt gut, aber wenn es Null zurückgibt, auch in der Rails-Konsole. – Blankman

+2

@Blankman: das ist eine Frage, die Sie akzeptieren könnten. –

Antwort

1

Verwenden Sie Rails 3.x? Wenn nicht, sollten Sie RAILS_ROOT statt Rails.root verwenden.

+1

Sogar 'RAILS_ROOT' ist' nil' in 'application.rb' –

0

Ich hatte das gleiche Problem, wenn ich versuchte, es vor der Modul- und Klassendeklaration zu verwenden. Versuchen Sie es im Inneren zu benutzen und sehen Sie, ob das einen Unterschied macht, z.

module MyApp 
    class Application < Rails::Application 

    puts Rails.root 

    end 
end 
8

Ich kann erklären, warum, aber ich kann Ihnen keine Umgehungslösung geben.

Rails.root definiert in rails/railties/lib/rails.rb

def root 
    application && application.config.root 
end 

In application.rb, wird die Instanz von application noch nicht erstellt, weil die Application Klasse definiert wird ... Die Anwendung erst nach initialisiert wird, in environment.rb:

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

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

EDIT

Die Abhilfe ist direkt vor unseren Augen:

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