2010-12-10 12 views
0

Ich habe eine ältere Anwendung läuft Ruby on Rails 2.2, und ich habe Probleme, ein Juwel bekommen zu arbeiten, weil es nicht die aktuelle Umgebung mit Rails.env finden:Rails.env undefined in Rails 2

$ script/console 
>> Rails.env 
NoMethodError: undefined method `env' for Rails:Module 
from (irb):1 

Der Edelstein ist so eingerichtet, dass er Rails.env verwendet, wenn Rails definiert ist, und RAILS_ENV, wenn dies nicht der Fall ist. Aber ich habe anscheinend ein Rails Objekt ohne eine env Methode (obwohl ich gelesen habe, dass diese Methode in Rails 2 hinzugefügt wurde). Irgendeine Idee was ist los?

+0

Ich habe keine 2.2 installiert (2.3.8 hat diese Methode), aber man kann sehen @, welche Methoden verfügbar sind, indem diese in der Konsole ausgeführt wird: 'setzt Rails.methods.sort'. – Brian

+0

Es sind 138 Methoden aufgelistet, aber kein 'env'. – jrdioko

Antwort

2

Das Rails Modul war immer in Schienen. Es ist nicht neu in 3, also zu überprüfen, ob es definiert ist, ist der falsche Weg, um Dinge zu tun. Der richtige Weg, um festzustellen, ob Sie Rails.env verwenden können, ist Rails.respond_to? :env.

+0

Danke! Ich werde das an den Edelsteinmeister weiterreichen. Was ist als Workaround am sinnvollsten? Ist es schaden, "Rails.env" als "RAILS_ENV" zu definieren? – jrdioko

+0

@jrdioko Für 2.x Kompatibilität können Sie das tun, aber es ist keine gute Idee, immer 'RAILS_ENV' zu verwenden, da es in 3 veraltet ist. – ryeguy

+0

' Rails.method_defined? (: Env) 'gibt false auch auf Rails 3 zurück – jrdioko

3

Rails.env wurde in Rails 2.3 eingeführt. Sie möchten wahrscheinlich nach Möglichkeit auf Rails 2.3 upgraden.

Ansonsten versuchen, dies in einem config/initializers/rails_env.rb:

require 'active_support/string_inquirer' 
def Rails.env 
    @_env ||= ActiveSupport::StringInquirer.new(ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development") 
end 
+0

Danke! Aber kein 'ActiveSupport :: StringInquirer' auf meinem System. Ich nehme an, ich könnte es zu einer geraden Saite machen? – jrdioko

+0

Sie können das versuchen, hängt von dem Edelstein ab, den Sie verwenden. Wenn es 'Rails.env.production?' Dann brauchst du den StringInquirer. In diesem Fall können Sie es zurückportieren: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/string_inquirer.rb – iain