programing

레일즈 앱에 대한 사용자 지정 구성 옵션을 만드는 가장 좋은 방법은 무엇입니까?

subpage 2023. 6. 3. 08:27
반응형

레일즈 앱에 대한 사용자 지정 구성 옵션을 만드는 가장 좋은 방법은 무엇입니까?

레일즈 응용 프로그램에 대한 구성 옵션을 하나 만들어야 합니다.모든 환경에서 동일할 수 있습니다.내가 그것을 설치하면 그것을 발견했습니다.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

반응형