복붙노트

[RUBY-ON-RAILS] 내 레일 응용 프로그램에 대한 사용자 정의 설정 옵션을 만들 수있는 가장 좋은 방법은?

RUBY-ON-RAILS

내 레일 응용 프로그램에 대한 사용자 정의 설정 옵션을 만들 수있는 가장 좋은 방법은?

내 레일 응용 프로그램에 대한 하나의 설정 옵션을 만들어야합니다. 그것은 모든 환경에 대해 동일 할 수 있습니다. 나는 environment.rb에 그것을 설정하면, 그것은 내가 원하는 정확히 무엇이다, 내 뷰에서 사용할 수 있음을 발견 ...

environment.rb

AUDIOCAST_URI_FORMAT = http://blablalba/blabbitybla/yadda

훌륭한 작품.

그러나, 나는 조금 불안 해요. 이 그것을 할 수있는 좋은 방법인가? 더 엉덩이의 방법이 있나요?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    9.오메르 빈 라덴의 우아한 솔루션을 구축, 나는 문자로 키를 전환하기로 결정했다. 단 하나의 변화는 다음과 같습니다

    오메르 빈 라덴의 우아한 솔루션을 구축, 나는 문자로 키를 전환하기로 결정했다. 단 하나의 변화는 다음과 같습니다

    all_config = YAML.load_file("#{Rails.root}/config/config.yml").with_indifferent_access || {}
    

    이것은 예를 들어, 키 등의 기호로 다음 기준 값을 수행 할 수 있습니다

    AppConfig[:twitter][:key]
    

    이 내 눈에 깔끔한 보인다.

    (내 명성 의견에 충분히 높은이 오메르의 답변에 없기 때문에 대답으로 게시)

  10. ==============================

    10.simpleconfig 같은 I. 그것은 당신이 환경 구성 당이 할 수 있습니다.

    simpleconfig 같은 I. 그것은 당신이 환경 구성 당이 할 수 있습니다.

  11. ==============================

    11.... 데이터베이스, 파일, 코드 : 저장 응용 프로그램 매개 변수에 가장 좋은 장소 인 경우에 내 대답을 참조?

    ... 데이터베이스, 파일, 코드 : 저장 응용 프로그램 매개 변수에 가장 좋은 장소 인 경우에 내 대답을 참조?

    당신이 다른 파일에 대한 간단한 참조의 점에서 한 것과 변형. 그것은 environment.rb에 지속적으로 업데이트되지 않습니다 그 안에 응용 프로그램 특정 물건의 힙이없는 것으로 본다. 의 질문에없는 특정의 대답은 '레일 식으로인가?'하지만, 아마 그것에 대해 몇 가지 논의가있을 수 있습니다.

  12. ==============================

    12.나는 글로벌 애플리케이션 스택을 통해 설정에 액세스 선호합니다. 나는 지역 범위를 초과하는 글로벌 변수를 피할 수 있습니다.

    나는 글로벌 애플리케이션 스택을 통해 설정에 액세스 선호합니다. 나는 지역 범위를 초과하는 글로벌 변수를 피할 수 있습니다.

    설정 / 초기화 / myconfig.rb

    MyAppName::Application.define_singleton_method("myconfig") {YAML.load_file("#{Rails.root}/config/myconfig.yml") || {}}
    

    그리고 그것을 액세스 할 수 있습니다.

    MyAppName::Application.myconfig["yamlstuff"]
    
  13. ==============================

    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. ==============================

    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
    
  15. from https://stackoverflow.com/questions/592554/best-way-to-create-custom-config-options-for-my-rails-app by cc-by-sa and MIT license