레일에서 사용자 정의 구성 변수를 정의하는 방법
레일스 애플리케이션에 커스텀 구성 변수를 추가하는 방법과 컨트롤러에서 변수에 액세스하는 방법이 궁금합니다. 예를 들어 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
.
예를 들면 다음과 같습니다.
touch config/passwords.yml
#config/passwords.yml development: username: 'a' password: 'b' production: username: 'aa' password: 'bb'
touch config/initializers/constants.rb
#config/initializers/constants.rb AUTHENTICATION = Rails.application.config_for :passwords
이제
AUTHENTICATION
응용 프로그램의 어느 곳에서나 상수 를 사용할 수 있습니다.#rails c production :001> AUTHENTICATION['username'] => 'aa'
그런 다음 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
'Programing' 카테고리의 다른 글
C #에서 XML 파일을 읽고 구문 분석하는 방법 (0) | 2020.03.04 |
---|---|
리눅스 어떻게 복사하지만 덮어 쓰지 않습니까? (0) | 2020.03.04 |
일반적으로 Node.js는 10,000 개의 동시 요청을 어떻게 처리합니까? (0) | 2020.03.04 |
파이썬에서 문자열에서 한 문자 변경 (0) | 2020.03.04 |
인쇄용 인라인 if 문을 작성하는 방법은 무엇입니까? (0) | 2020.03.04 |