Programing

레일에서 사용자 정의 구성 변수를 정의하는 방법

lottogame 2020. 3. 4. 08:05
반응형

레일에서 사용자 정의 구성 변수를 정의하는 방법


레일스 애플리케이션에 커스텀 구성 변수를 추가하는 방법과 컨트롤러에서 변수에 액세스하는 방법이 궁금합니다. 예를 들어 development.rb라는 구성 파일에서 upload_directory를 정의하고 내 중 하나에서 액세스 할 수 있어야합니다. 컨트롤러.

둘째, 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


https://github.com/mislav/choices를 사용 하여 깔끔한 보석을 확인하십시오.

이렇게하면 오픈 소스 프로젝트에서 민감한 데이터가 노출되지 않습니다


YAML 설정을위한 간단한 플러그인을 만들었습니다. Yettings

khelll의 답변 코드와 비슷한 방식으로 작동하지만이 YAML 구성 파일 만 추가하면됩니다.

app/config/yetting.yml

플러그인은 다음과 같이 앱에서 클래스 메소드로 YML 설정에 액세스 할 수있는 클래스를 동적으로 작성합니다.

Yetting.your_setting

또한 고유 한 이름을 가진 여러 설정 파일을 사용하려면 다음과 같이 app / config 내의 하위 디렉토리에 배치 할 수 있습니다.

app/config/yettings/first.yml
app/config/yettings/second.yml

그런 다음 다음과 같은 값에 액세스 할 수 있습니다.

FirstYetting.your_setting
SecondYetting.your_setting

또한 환경별로 재정의 할 수있는 기본 설정을 제공합니다. yml 파일 내에서 erb를 사용할 수도 있습니다.


나는 settingslogic 보석을 정말 좋아합니다 . 설치 및 사용이 매우 쉽습니다.

https://github.com/binarylogic/settingslogic


Heroku를 사용하거나 응용 프로그램 설정을 환경 변수로 유지 해야하는 경우 figaro gem이 매우 유용합니다.


웹 인터페이스를 통해 변경해야하는 전역 구성 값에 레일 설정 을 사용하고 싶습니다 .


우리가 직장에서 시작한 것은 ActiveSupport Ordered Hash입니다.

환경 파일 내에서 구성을 깔끔하게 정의 할 수 있습니다.

config.service = ActiveSupport::OrderedOptions.new
config.service.api_key = ENV['SERVICE_API_KEY']
config.service.shared_secret = ENV['SERVICE_SHARED_SECRET']

응용 프로그램의 구성을 처리하는 방법에 대한 좋은 접근 방식을 제안합니다. 세 가지 기본 규칙이 있습니다.

  • 코드가 아닌 구성을 변경하십시오.
  • 조건에 따른 구성 사용;
  • 무언가를 의미하는 코드를 작성하십시오.

보다 자세한 개요를 보려면 다음 링크를 따르십시오 . 올바른 방법으로 레일 구성

참고 URL : https://stackoverflow.com/questions/1450285/how-to-define-custom-configuration-variables-in-rails



반응형