레일스 애플리케이션에 커스텀 구성 변수를 추가하는 방법과 컨트롤러에서 변수에 액세스하는 방법이 궁금합니다. 컨트롤러.
둘째, s3 액세스, 비밀 키로 yaml 파일을 추가하려면 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_ENV
함께 Rails.env
와 RAILS_ROOT
함께 Rails.root
.
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
config/environments/production.rb
구성 : config.whatever = false
어디서나 액세스 : Rails.configuration.whatever
undefined method
있습니다.
Rails 3.0.5에서는 다음과 같은 접근 방식이 효과적이었습니다.
에 config/environments/development.rb
쓰기
config.custom_config_key = :config_value
custom_config_key
그런 다음 값 을 사용하여 다른 파일에서 값 을 참조 할 수 있습니다.
Rails.application.config.custom_config_key
undefined method
있습니다.
method_missing': undefined method
# <Rails :: Application :: Configuration : 0x007f9f735b7240> ... "에 대해 "... store "라는 오류가 발생합니다 . "config.store.works"구성 변수를 추가하려고했습니다.
store
. 이 답변의 방법을 사용하려면 변수의 이름을 바꾸 store_works
거나 정의 된 config.store
블록을 만들 works
수 있습니다.
이것은 레일 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
사용자 정의 변수를 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 보석을 정말 좋아합니다 . 설치 및 사용이 매우 쉽습니다.
우리가 직장에서 시작한 것은 ActiveSupport Ordered Hash입니다.
환경 파일 내부에서 구성을 깔끔하게 정의 할 수 있습니다.
config.service = ActiveSupport::OrderedOptions.new
config.service.api_key = ENV['SERVICE_API_KEY']
config.service.shared_secret = ENV['SERVICE_SHARED_SECRET']
응용 프로그램의 구성을 처리하는 방법에 대한 좋은 접근 방식을 제안합니다. 세 가지 기본 규칙이 있습니다.
보다 자세한 개요를 보려면 다음 링크를 따르십시오 . 올바른 방법으로 레일 구성