2010-12-10 64 views
0

我on Rails的2.2運行Ruby的舊版應用程序,和我遇到了麻煩寶石的工作,因爲它無法找到當前環境Rails.envRails.env未定義在梁2

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

當定義Rails時,創建的寶石設置爲使用Rails.env,如果不是,則設置RAILS_ENV。但我似乎有一個Rails對象沒有env方法(即使我讀了該方法被添加到Rails 2中)。任何想法發生了什麼?

+0

我沒有安裝2.2(2.3.8具有該方法)做的,但你可以看看@什麼方法都可以通過在控制檯中運行以下命令: '放置Rails.methods.sort'。 – Brian 2010-12-10 17:58:56

+0

列出了138種方法,但沒有'env'。 – jrdioko 2010-12-10 19:08:55

回答

2

Rails模塊一直在rails中。這在3中並不新鮮,因此檢查它是否被定義是錯誤的方法。確定您是否可以使用Rails.env的正確方法是執行Rails.respond_to? :env

+0

謝謝!我會把它傳給寶石維護者。與此同時,作爲一種解決方法最有意義的是什麼?將'Rails.env'定義爲'RAILS_ENV'有沒有什麼壞處? – jrdioko 2010-12-10 19:08:05

+0

@jrdioko對於2.x兼容性,你可以這樣做,但總是隻使用'RAILS_ENV'並不是一個好主意,因爲它在3中已被棄用。 – ryeguy 2010-12-10 20:00:44

+0

Rails.method_defined?(:env)'即使在Rails 3上也返回false – jrdioko 2010-12-14 19:19:24

3

Rails.env在Rails 2.3中引入。如果可能的話,你可能想升級到Rails 2.3。

否則,試試這個在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

謝謝!但是在我的系統上沒有'ActiveSupport :: StringInquirer'。我想我可以把它變成一條直線? – jrdioko 2010-12-10 19:11:22

+0

你可以試試,取決於你使用的寶石。如果它執行'Rails.env.production?',那麼你需要StringInquirer。在這種情況下,您可以將其恢復:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/string_inquirer.rb – iain 2010-12-11 19:03:41