Rails.env 및 RAILS_ENV


219

어떤 env가 실행 중인지 확인할 때 예제에서 둘 다 봅니다. 선호하는 것은 무엇입니까? 그것들은 모든 의도와 목적을 위해 동등합니까?

답변:


370

워드 프로세서에 따르면 , #Rails.envRAILS_ENV:

    # File vendor/rails/railties/lib/initializer.rb, line 55
     def env
       @_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
     end

그러나 다음을 사용하여 어떻게 래핑 되는지 구체적으로 살펴보십시오 ActiveSupport::StringInquirer.

이 클래스에서 문자열을 감싸면 평등을 테스트하는 더 좋은 방법을 제공합니다. Rails.env에 의해 반환 된 값은 이것을 호출하는 대신 StringInquirer 객체로 래핑됩니다.

Rails.env == "production"

당신은 이것을 호출 할 수 있습니다 :

Rails.env.production?

따라서 그것들은 정확히 동일하지는 않지만 상당히 가깝습니다. 아직 Rails를 많이 사용하지는 않았지만 #Rails.env을 사용하여 시각적으로 더 매력적인 옵션 이라고 말할 수 StringInquirer있습니다.


좋은 설명, thx! RAILS_ENV가 정의 된 곳을 찾으려고합니까? 어떤 생각 ??
brad

70
더 이상 사용되지 않는 Rails.env새로운 표준이라고 언급 할 가치가 RAILS_ENV있습니다.
Ryan Bigg

4
Ryan, 명령 행에서 Rails.env를 사용할 수 없습니다. 더 이상 사용되지 않을 예정이라면 CLI에서 무엇을 사용 하시겠습니까?
pjammer

8
Rails.env.production을 사용하십니까? RAILS_ENV = "production"과 같이 실제로 환경을 변경하는 오타로부터 보호합니다. 놓친 = 부호를 주목하십시오.
Magne

이 모든 어리석은 복잡성 때문에 물음표를 사용할 수 있습니까?
계정

31

ENV['RAILS_ENV']지금은 사용되지 않습니다 .

Rails.env분명히 훨씬 좋은 것을 사용해야합니다 .


29

Rails 2.x 이전에는 현재 환경을 얻는 가장 좋은 방법은 RAILS_ENV상수를 사용하는 것 입니다. 마찬가지로 RAILS_DEFAULT_LOGGER현재 로거 RAILS_ROOT를 가져 오거나 루트 폴더의 경로를 얻는 데 사용할 수 있습니다 .

Rails 2.x부터 Rails Rails는 몇 가지 특별한 방법으로 모듈을 소개했습니다 .

  • Rails.root
  • Rails.env
  • Rails.logger

이것은 단지 외관상의 변화가 아닙니다. Rails 모듈은 StringInquirer지원 과 같은 표준 상수를 사용하여 사용할 수없는 기능을 제공합니다 . 약간의 차이도 있습니다. Rails.root간단한 String부스 Path인스턴스를 반환하지 않습니다 .

어쨌든, 선호되는 방법은 Rails모듈을 사용하는 것 입니다. 상수는 Rails 3에서 더 이상 사용되지 않으며 향후 릴리스, 아마도 Rails 3.1에서 제거 될 것입니다.


1
참고로 여기 에서 논의한 바에 따르면 2.0이 아닌 Rails 2.3에 이러한 방법이 도입 된 것 같습니다.
jrdioko

프로젝트에서 2.1.2를 사용하고 있습니다. Rails.env문제없이 작동합니다.
Benjamin Oakes

2

내 앱을 디버깅하는 동안 이상한 동작 : "active_support / notifications"(rdb : 1) p ENV [ 'RAILS_ENV'] "test"(rdb : 1) p Rails.env "development"필요

나는 당신이 서로 붙어 있어야한다고 말하고 싶습니다 (그리고 바람직하게는 Rails.env)


2

업데이트 : Rails 3.0.9 : railties / lib / rails.rb에 정의 된 env 메소드

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.