[ruby-on-rails] 레일에서 사용자 정의 구성 변수를 정의하는 방법

레일스 애플리케이션에 커스텀 구성 변수를 추가하는 방법과 컨트롤러에서 변수에 액세스하는 방법이 궁금합니다. 컨트롤러.

둘째, s3 액세스, 비밀 키로 yaml 파일을 추가하려면 Rails 앱에서 파일을 초기화하는 방법과 정의한 값에 어떻게 액세스합니까? 해당 구성 파일에서.



답변

업데이트 1

권장 사항 : 요즘에는 Rails Config gem을 사용하여 정교한 컨트롤을 제공하고 있습니다.

업데이트 2

빠른 해결책을 원한다면 아래 의 Jack Pratt의 답변 을 확인하십시오 .

아래의 원래 답변은 여전히 ​​작동하지만이 답변은 구식입니다. 업데이트 1과 2를 보는 것이 좋습니다.

원래 답변 :

빠른 솔루션을 위해 Ryan Bates가 캐스팅 한 “YAML 구성 파일” 화면을 보는 것이 매우 유용합니다.

요약해서 말하자면:

# config/initializers/load_config.rb
APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env]

# application.rb
if APP_CONFIG['perform_authentication']
  # Do stuff
end


답변

Rails 3에서 애플리케이션 특정 커스텀 구성 데이터는 애플리케이션 구성 객체에 배치 될 수 있습니다. 초기화 파일 또는 환경 파일에서 구성을 지정할 수 있습니다 (예 MyApp: 특정 응용 프로그램의 경우) .

MyApp::Application.config.custom_config_variable = :my_config_setting

또는

Rails.configuration.custom_config_variable = :my_config_setting

설정을 읽으려면 설정하지 않고 구성 변수를 호출하면됩니다.

Rails.configuration.custom_config_variable
=> :my_config_setting

레일 업데이트 4

Rails 4에는 이것을위한 새로운 방법이 있습니다 => http://guides.rubyonrails.org/configuring.html#custom-configuration

여기에 이미지 설명을 입력하십시오


답변

Rails 3.0.5에서는 다음과 같은 접근 방식이 효과적이었습니다.

config/environments/development.rb쓰기

config.custom_config_key = :config_value

custom_config_key그런 다음 값 을 사용하여 다른 파일에서 값 을 참조 할 수 있습니다.

Rails.application.config.custom_config_key


답변

이것은 레일 3.1에서 작동합니다.

config / environment.rb (또는 특정 환경을 대상으로하는 config / environments / ..)에서 :

YourApp::Application.config.yourKey = 'foo'

컨트롤러 또는 다음과 같은 뷰에서 액세스 할 수 있습니다.

YourApp::Application.config.yourKey

(App은 애플리케이션 이름으로 바꿔야합니다.)

노트 : Ruby 코드이므로 구성 키가 많은 경우 다음을 수행 할 수 있습니다.

config / environment.rb에서 :

YourApp::Application.configure do
  config.something = foo
  config.....
  config....
  .
  config....
end


답변

레일 4

사용자 정의 변수를 yaml 파일에 넣었다고 가정합니다.

# config/acme.yml
development:
  :api_user: 'joe'
  :api_pass: 's4cret'
  :timeout: 20

이니셜 라이저를 작성하여로드하십시오.

# config/initializers/acme.rb
acme_config = Rails.application.config_for :acme

Rails.application.configure do
  config.acme = ActiveSupport::OrderedOptions.new
  config.acme.api_user = acme_config[:api_user]
  config.acme.api_pass = acme_config[:api_pass]
  config.acme.timeout  = acme_config[:timeout]
end

이제 앱 어디에서나 다음과 같은 값에 액세스 할 수 있습니다.

Rails.configuration.acme.api_user

Rails.application.config_for :acme로드하여 acme.yml올바른 환경을 사용하는 것이 편리 합니다.


답변

추가 gem없이 Rails 4.2 부터을 사용하여 간단히 config / hi.yml을 로드 할 수 있습니다 Rails.application.config_for :hi.

예를 들면 다음과 같습니다.

  1. touch config/passwords.yml

        #config/passwords.yml
        development:
          username: 'a'
          password: 'b'
        production:
          username: 'aa'
          password: 'bb'
  1. touch config/initializers/constants.rb

    #config/initializers/constants.rb
    AUTHENTICATION = Rails.application.config_for :passwords
  1. 이제 AUTHENTICATION응용 프로그램의 어느 곳에서나 상수 를 사용할 수 있습니다.

    #rails c production
    :001> AUTHENTICATION['username'] => 'aa'
  2. 그런 다음 passwords.yml.gitignore :에 추가 하고 echo /config/passwords.yml >> .gitignore편의를 위해 예제 파일을 cp /config/passwords.yml /config/passwords.example.yml만든 다음 실제 프로덕션 값으로 프로덕션 콘솔에서 예제 파일을 편집하십시오.


답변

Rails 4.2의 최신 멋진 기능을 위해 이것을 업데이트하고 싶었습니다. 이제 모든 config/**/*.rb파일 에서이 작업을 수행 할 수 있습니다.

config.x.whatever.you.want = 42

… 앱에서 다음과 같이 사용할 수 있습니다.

Rails.configuration.x.whatever.you.want

자세한 내용은 여기를 참조하십시오 : http://guides.rubyonrails.org/configuring.html#custom-configuration