[RUBY-ON-RAILS] 내 레일 응용 프로그램에 대한 사용자 정의 설정 옵션을 만들 수있는 가장 좋은 방법은?
RUBY-ON-RAILS내 레일 응용 프로그램에 대한 사용자 정의 설정 옵션을 만들 수있는 가장 좋은 방법은?
내 레일 응용 프로그램에 대한 하나의 설정 옵션을 만들어야합니다. 그것은 모든 환경에 대해 동일 할 수 있습니다. 나는 environment.rb에 그것을 설정하면, 그것은 내가 원하는 정확히 무엇이다, 내 뷰에서 사용할 수 있음을 발견 ...
environment.rb
AUDIOCAST_URI_FORMAT = http://blablalba/blabbitybla/yadda
훌륭한 작품.
그러나, 나는 조금 불안 해요. 이 그것을 할 수있는 좋은 방법인가? 더 엉덩이의 방법이 있나요?
해결법
-
==============================
1.데이터베이스 테이블에 저장 될 필요가없는 일반 응용 프로그램 구성을 위해, 나는 config 디렉토리 내에서 config.yml 파일을 만들려면. 귀하의 예를 들어, 다음과 같습니다
데이터베이스 테이블에 저장 될 필요가없는 일반 응용 프로그램 구성을 위해, 나는 config 디렉토리 내에서 config.yml 파일을 만들려면. 귀하의 예를 들어, 다음과 같습니다
defaults: &defaults audiocast_uri_format: http://blablalba/blabbitybla/yadda development: <<: *defaults test: <<: *defaults production: <<: *defaults
이 구성 파일은 설정 / 초기화에서 사용자 지정 이니셜 라이저에서로드됩니다 :
# Rails 2 APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")[RAILS_ENV] # Rails 3+ APP_CONFIG = YAML.load_file(Rails.root.join('config/config.yml'))[Rails.env]
당신이 레일 (3)을 사용하는 경우, 당신은 실수로 상대 설정 경로에 선도적 인 슬래시를 추가하지 않도록.
그런 다음 사용하여 값을 검색 할 수 있습니다 :
uri_format = APP_CONFIG['audiocast_uri_format']
자세한 내용이 Railscast를 참조하십시오.
-
==============================
2.(RAILS_ROOT & RAILS_ENV이되지 않습니다) initialiser 코드의 3 버전으로 다음되는 레일
(RAILS_ROOT & RAILS_ENV이되지 않습니다) initialiser 코드의 3 버전으로 다음되는 레일
APP_CONFIG = YAML.load_file (Rails.root.join ( '설정', 'config.yml')) Rails.env]
해당 계정에, 예를 취할 설정 파일을 변경해야합니다, 그래서 또한, 루비 1.9.3은 심리학 병합 키 대소 문자를 구별하게하는 사용
defaults: &DEFAULTS audiocast_uri_format: http://blablalba/blabbitybla/yadda development: <<: *DEFAULTS test: <<: *DEFAULTS production: <<: *DEFAULTS
-
==============================
3.> = 4.2 레일
> = 4.2 레일
그냥 예를 들어, 설정 / 디렉토리로 YAML 파일을 생성 : 설정 / neo4j.yml.
neo4j.yml의 콘텐츠 (단순화하기 위해, 나는 모든 환경에 대한 기본 사용) 아래와 같이 뭔가를해야만 할 수 있습니다 :
default: &default host: localhost port: 7474 username: neo4j password: root development: <<: *default test: <<: *default production: <<: *default
에서 설정 / application.rb :
module MyApp class Application < Rails::Application config.neo4j = config_for(:neo4j) end end
지금, 당신의 사용자 정의 설정은 다음과 같은 액세스 :
Rails.configuration.neo4j['host'] #=>localhost Rails.configuration.neo4j['port'] #=>7474
더 많은 정보
공식 API 문서로 config_for 방법을 설명 레일 :
당신은 YAML 파일을 사용하지 않으려면
레일로 공식 가이드는 말한다 :
예
config.x.payment_processing.schedule = :daily config.x.payment_processing.retries = 3 config.x.super_debugger = true
Rails.configuration.x.payment_processing.schedule # => :daily Rails.configuration.x.payment_processing.retries # => 3 Rails.configuration.x.super_debugger # => true Rails.configuration.x.super_debugger.not_set # => nil
config_for 방법에 대한 공식 참조 | 공식 레일 가이드
-
==============================
4.1 단계 : 설정 / 초기화 / appconfig.rb 만들기
1 단계 : 설정 / 초기화 / appconfig.rb 만들기
require 'ostruct' require 'yaml' all_config = YAML.load_file("#{Rails.root}/config/config.yml") || {} env_config = all_config[Rails.env] || {} AppConfig = OpenStruct.new(env_config)
2 단계 : 설정 / config.yml 만들기
common: &common facebook: key: 'asdjhasxas' secret : 'xyz' twitter: key: 'asdjhasxas' secret : 'abx' development: <<: *common test: <<: *common production: <<: *common
3 단계 : 코드에서 아무 곳이나 상수를 가져옵니다
facebook_key = AppConfig.facebook['key'] twitter_key = AppConfig.twitter['key']
-
==============================
5.. 난 그냥 4.2, 5, 당신은 지금 당신의 설정 / ** / * RB 파일의 내부에서이 작업을 수행 할 수 있습니다 레일의 최신 멋진 물건이 업데이트 싶었 :
. 난 그냥 4.2, 5, 당신은 지금 당신의 설정 / ** / * RB 파일의 내부에서이 작업을 수행 할 수 있습니다 레일의 최신 멋진 물건이 업데이트 싶었 :
config.x.whatever = 42
(그리고 그 문자 그대로의 x가, 즉. config.x. 문자 그대로를해야하고 당신은 X 후 원하는대로 추가 할 수 있습니다)
... 그리고이 같은 앱에서 사용할 수 있습니다 :
Rails.configuration.x.whatever
자세한 내용은 여기를 참조하십시오 : http://guides.rubyonrails.org/configuring.html#custom-configuration
-
==============================
6.이 주제에 그냥 몇 가지 추가 정보 :
이 주제에 그냥 몇 가지 추가 정보 :
APP_CONFIG = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env].with_indifferent_access
".with_indifferent_access"는 문자열 키를 사용하여 해시 또는 이에 상응하는 기호 키 값에 액세스 할 수 있습니다.
예를 들면. APP_CONFIG [ 'audiocast_uri_format'] => '에 http : // blablalba / blabbitybla / 옹알' APP_CONFIG [: audiocast_uri_format] => '에 http : // blablalba / blabbitybla / 옹알'
순전히 편리한 점은,하지만 난 내 키를 문자로 표현해야하는 것을 선호합니다.
-
==============================
7.나는 레일 3.0 / 3.1 존과 비슷한을 사용하지만, 내가 먼저 파일을 구문 분석 ERB 있습니다 :
나는 레일 3.0 / 3.1 존과 비슷한을 사용하지만, 내가 먼저 파일을 구문 분석 ERB 있습니다 :
APP_CONFIG = YAML.load(ERB.new(File.new(File.expand_path('../config.yml', __FILE__)).read).result)[Rails.env]
이것은 내가 Heroku가의 redistogo URL을 읽는 것처럼, 필요하면 내 설정에서 ERB를 사용할 수 있습니다 :
production: <<: *default redis: <%= ENV['REDISTOGO_URL'] %>
-
==============================
8.4 레일
4 레일
방법 database_configuration 유사한 사용자 정의 구성 YAML을 작성하고로드 (귀하의 응용 프로그램에 사용할 수 있도록)합니다.
나는 레디 스 구성 파일을 필요로 내 경우에 * .yml를 만듭니다.
설정 / redis.yml
default: &default host: localhost port: 6379 development: <<: *default test: <<: *default production: <<: *default host: <%= ENV['ELASTICACHE_HOST'] %> port: <%= ENV['ELASTICACHE_PORT'] %>
그런 다음 구성을로드
설정 / application.rb
module MyApp class Application < Rails::Application ## http://guides.rubyonrails.org/configuring.html#initialization-events config.before_initialize do Rails.configuration.redis_configuration = YAML.load_file("#{Rails.root}/config/redis.yml") end end end
값에 액세스 :
Rails.configuration.redis_configuration [Rails.env] 당신이 Rails.configuration.database_configuration하여 database.yml을에 액세스 할 수있는 방법과 유사 [Rails.env]
-
==============================
9.오메르 빈 라덴의 우아한 솔루션을 구축, 나는 문자로 키를 전환하기로 결정했다. 단 하나의 변화는 다음과 같습니다
오메르 빈 라덴의 우아한 솔루션을 구축, 나는 문자로 키를 전환하기로 결정했다. 단 하나의 변화는 다음과 같습니다
all_config = YAML.load_file("#{Rails.root}/config/config.yml").with_indifferent_access || {}
이것은 예를 들어, 키 등의 기호로 다음 기준 값을 수행 할 수 있습니다
AppConfig[:twitter][:key]
이 내 눈에 깔끔한 보인다.
(내 명성 의견에 충분히 높은이 오메르의 답변에 없기 때문에 대답으로 게시)
-
==============================
10.simpleconfig 같은 I. 그것은 당신이 환경 구성 당이 할 수 있습니다.
simpleconfig 같은 I. 그것은 당신이 환경 구성 당이 할 수 있습니다.
-
==============================
11.... 데이터베이스, 파일, 코드 : 저장 응용 프로그램 매개 변수에 가장 좋은 장소 인 경우에 내 대답을 참조?
... 데이터베이스, 파일, 코드 : 저장 응용 프로그램 매개 변수에 가장 좋은 장소 인 경우에 내 대답을 참조?
당신이 다른 파일에 대한 간단한 참조의 점에서 한 것과 변형. 그것은 environment.rb에 지속적으로 업데이트되지 않습니다 그 안에 응용 프로그램 특정 물건의 힙이없는 것으로 본다. 의 질문에없는 특정의 대답은 '레일 식으로인가?'하지만, 아마 그것에 대해 몇 가지 논의가있을 수 있습니다.
-
==============================
12.나는 글로벌 애플리케이션 스택을 통해 설정에 액세스 선호합니다. 나는 지역 범위를 초과하는 글로벌 변수를 피할 수 있습니다.
나는 글로벌 애플리케이션 스택을 통해 설정에 액세스 선호합니다. 나는 지역 범위를 초과하는 글로벌 변수를 피할 수 있습니다.
설정 / 초기화 / myconfig.rb
MyAppName::Application.define_singleton_method("myconfig") {YAML.load_file("#{Rails.root}/config/myconfig.yml") || {}}
그리고 그것을 액세스 할 수 있습니다.
MyAppName::Application.myconfig["yamlstuff"]
-
==============================
13.당신은 환경에 따라 레일 초기화 및 구성 설정에서 설정을 사용할 수 있습니다
당신은 환경에 따라 레일 초기화 및 구성 설정에서 설정을 사용할 수 있습니다
# config/application.rb Bundler.require(*Rails.groups) mode = ENV['RAILS_ENV'] || 'development' file = File.dirname(__FILE__).concat('/settings.yml') Settings = YAML.load_file(file).fetch(mode) Settings.define_singleton_method(:method_missing) {|name| self.fetch(name.to_s, nil)}
두 가지 방법으로 설정을 얻을 수 있습니다 : 설정 [ '이메일'] 또는 Settings.email
-
==============================
14.인상 메시지와 함께 사용자 지정 설정, 내 가장 좋은 방법은 setting.yml가 없을 때.
인상 메시지와 함께 사용자 지정 설정, 내 가장 좋은 방법은 setting.yml가 없을 때.
사용자 정의 초기화에서 설정 / 초기화 / custom_config.rb에서로드됩니다
setting_config = File.join(Rails.root,'config','setting.yml') raise "#{setting_config} is missing!" unless File.exists? setting_config config = YAML.load_file(setting_config)[Rails.env].symbolize_keys @APP_ID = config[:app_id] @APP_SECRET = config[:app_secret]
만들기 YAML에서 설정 / setting.yml
development: app_id: 433387212345678 app_secret: f43df96fc4f65904083b679412345678 test: app_id: 148166412121212 app_secret: 7409bda8139554d11173a32222121212 production: app_id: 148166412121212 app_secret: 7409bda8139554d11173a32222121212
from https://stackoverflow.com/questions/592554/best-way-to-create-custom-config-options-for-my-rails-app by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 새 응용 프로그램을 만들 때 레일을 버전을 지정하면 사용 (0) | 2020.02.04 |
---|---|
[RUBY-ON-RAILS] 3.1 자산 파이프 라인을 레일 : 어떻게 부하 컨트롤러 고유의 스크립트에? (0) | 2020.02.04 |
[RUBY-ON-RAILS] 액티브 레코드를 사용하여 직렬화 된 데이터를 검색 (0) | 2020.02.04 |
[RUBY-ON-RAILS] 부하에 해당 파일 - 루비 젬 (LoadError) (0) | 2020.02.04 |
[RUBY-ON-RAILS] D3 자바 스크립트에서 원 객체 내에 이미지를 추가? (0) | 2020.02.04 |