레일즈 앱에 대한 사용자 지정 구성 옵션을 만드는 가장 좋은 방법은 무엇입니까?
레일즈 응용 프로그램에 대한 구성 옵션을 하나 만들어야 합니다.모든 환경에서 동일할 수 있습니다.내가 그것을 설치하면 그것을 발견했습니다.environment.rb
제 견해로는 가능합니다. 그게 바로 제가 원하는 것입니다.
environment.rb
AUDIOCAST_URI_FORMAT = http://blablalba/blabbitybla/yadda
잘 작동합니다.
하지만, 저는 조금 불안합니다.이것이 그것을 하는 좋은 방법입니까?좀 더 힙한 방법이 있을까요?
프로그램 , 는 데터베이테저필없요장는경우구성의응이를 만들고 싶습니다.config.yml
구성 디렉토리 내의 파일입니다.예를 들어, 다음과 같이 나타날 수 있습니다.
defaults: &defaults
audiocast_uri_format: http://blablalba/blabbitybla/yadda
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
이 구성 파일은 config/initializer의 사용자 지정 initializer에서 로드됩니다.
# 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']
자세한 내용은 이 레일캐스트를 참조하십시오.
Rails 3 버전의 이니셜라이저 코드는 다음과 같습니다(RAILS_ROOT 및 RAILS_ENV는 더 이상 사용되지 않습니다).
APP_CONFIG = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env]
또한 Ruby 1.9.3은 병합 키를 대소문자를 구분하는 Psych를 사용하므로 이를 고려하기 위해 구성 파일을 변경해야 합니다.
defaults: &DEFAULTS
audiocast_uri_format: http://blablalba/blabbitybla/yadda
development:
<<: *DEFAULTS
test:
<<: *DEFAULTS
production:
<<: *DEFAULTS
레일 >= 4.2
생성하기만 하면 됩니다.YAML
줄을 지어 에 들어가다.config/
디터리렉, 예:config/neo4j.yml
.
『 』의 neo4j.yml
다음과 같은 경우가 있습니다(간단하게 설명하기 위해 모든 환경에 대해 기본값을 사용했습니다).
default: &default
host: localhost
port: 7474
username: neo4j
password: root
development:
<<: *default
test:
<<: *default
production:
<<: *default
config/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
추가 정보
에서는 Rails API에 대해 설명합니다.config_for
방법:
현재 Rails 환경에 대한 config/foo.yml을 쉽게 로드할 수 있습니다.
당신이 않경우는려으를 사용하기를 .yaml
레일즈 공식 가이드에 따르면:
Rails 사용자 을 사용자 구성으로 고유의 할 수 .
config.x
소유물.
예
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
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/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']
45의 . Rails 4.2 및 5의 모든 에서 이 할 수 . 이제 당신은 당신의 모든 내부에서 이것을 할 수 있습니다.config/**/*.rb
삭제된 파일:
config.x.whatever = 42
(그리고 그것은 문자 그대로입니다.x
그안서에즉, 즉▁there,.config.x.
말 그대로 그것이어야 하고, 그리고 나서 당신은 당신이 원하는 것을 추가할 수 있습니다.x
)
...다음과 같이 앱에서 사용할 수 있습니다.
Rails.configuration.x.whatever
여기서 더 보기: http://guides.rubyonrails.org/configuring.html#custom-configuration
이 주제에 대한 추가 정보:
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/yadda'
APP_CONFIG[:audiocast_uri_format] => 'http://blablalba/blabbitybla/yadda'
순수하게 편리한 것이지만, 저는 제 열쇠를 기호로 표현하는 것을 선호합니다.
저는 Rails 3.0/3.1에 대해 John과 유사한 것을 사용하지만 먼저 파일을 구문 분석했습니다.
APP_CONFIG = YAML.load(ERB.new(File.new(File.expand_path('../config.yml', __FILE__)).read).result)[Rails.env]
이를 통해 필요한 경우 구성에서 ERB를 사용할 수 있습니다. 예를 들어 herku의 redistogo URL을 읽는 것과 같습니다.
production:
<<: *default
redis: <%= ENV['REDISTOGO_URL'] %>
Rails 4
사용자 구성 앱에서 가능) 방법과 하게 사용자 정의 구성 yaml을 생성하고 로드(및 앱에서 사용 가능)database_configuration
.
다음을 작성합니다.*.yml
제 경우에는 redis 구성 파일이 필요했습니다.
config/redis.yml
default: &default
host: localhost
port: 6379
development:
<<: *default
test:
<<: *default
production:
<<: *default
host: <%= ENV['ELASTICACHE_HOST'] %>
port: <%= ENV['ELASTICACHE_PORT'] %>
그런 다음 구성을 로드합니다.
config/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]
액세스할 수 있는 방법과 유사합니다.database.yml
타고Rails.configuration.database_configuration[Rails.env]
오메르 아슬람의 우아한 솔루션을 바탕으로 저는 키를 기호로 변환하기로 결정했습니다.유일한 변경 사항은 다음과 같습니다.
all_config = YAML.load_file("#{Rails.root}/config/config.yml").with_indifferent_access || {}
이를 통해 기호별 값을 키로 참조할 수 있습니다.
AppConfig[:twitter][:key]
제 눈에는 이것이 더 깔끔해 보입니다.
(오머의 답변에 대해 언급할 만큼 제 평판이 높지 않아 답변으로 게시됨)
저는 간단한 구성을 좋아합니다.환경별로 구성할 수 있습니다.
응용 프로그램 매개 변수를 저장하기에 가장 좋은 위치(데이터베이스, 파일, 코드...)에 대한 내 응답을 참조하십시오.
다른 파일에 대한 단순한 참조라는 점에서 사용자가 가진 것에 대한 변형입니다.environment.rb는 지속적으로 업데이트되지 않으며 앱별 항목이 많이 포함되어 있지 않습니다.'레일웨이인가요?'라는 질문에 대한 구체적인 답변은 아니지만, 아마도 거기서 그것에 대한 논의가 있을 것입니다.
저는 글로벌 응용 프로그램 스택을 통해 설정에 액세스하는 것을 선호합니다.저는 로컬 범위에서 과도한 글로벌 변수를 피합니다.
config/initializers/myconfig.dll
MyAppName::Application.define_singleton_method("myconfig") {YAML.load_file("#{Rails.root}/config/myconfig.yml") || {}}
으로 액세스합니다.
MyAppName::Application.myconfig["yamlstuff"]
레일이 초기화되기 전에 설정을 로드하는 방법
레일 초기화의 설정을 사용하고 환경별 설정을 구성할 수 있습니다.
# 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)}
설정은 두 가지 방법으로 얻을 수 있습니다.설정['email'] 또는 설정.email
setting.yml이 없을 때 상승 메시지와 함께 사용자 지정 구성을 하는 가장 좋은 방법입니다.
config/initializers/custom_config.message의 사용자 지정 이니셜라이저에서 로드됩니다.
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]
config/setting.yml에 YAML을 만듭니다.
development:
app_id: 433387212345678
app_secret: f43df96fc4f65904083b679412345678
test:
app_id: 148166412121212
app_secret: 7409bda8139554d11173a32222121212
production:
app_id: 148166412121212
app_secret: 7409bda8139554d11173a32222121212
언급URL : https://stackoverflow.com/questions/592554/best-way-to-create-custom-config-options-for-my-rails-app
'programing' 카테고리의 다른 글
Passport.js - 오류: 사용자를 세션으로 직렬화하지 못했습니다. (0) | 2023.06.03 |
---|---|
POSTGRESQL에서 DATE에서 연도를 추출하는 방법 (0) | 2023.06.03 |
Mipmap 대 그리기 가능한 폴더 (0) | 2023.06.03 |
제출하기 전에 앱에 대한 항목 링크 가져오기 (0) | 2023.06.03 |
두 개의 어레이를 동시에 반복하는 'Ruby way'는 무엇입니까? (0) | 2023.06.03 |