답변:
데이터베이스 테이블에 저장할 필요가없는 일반적인 응용 프로그램 구성을 config.yml
위해 config 디렉토리 내에 파일 을 만들고 싶습니다 . 예를 들어 다음과 같이 보일 수 있습니다.
defaults: &defaults
audiocast_uri_format: http://blablalba/blabbitybla/yadda
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
이 구성 파일은 config / initializers 의 사용자 정의 초기화 프로그램에서로드됩니다 .
# 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]
Rails 3을 사용하는 경우 실수로 상대 구성 경로에 슬래시를 추가하지 않도록하십시오.
그런 다음 다음을 사용하여 값을 검색 할 수 있습니다.
uri_format = APP_CONFIG['audiocast_uri_format']
자세한 내용은 이 Railscast 를 참조 하십시오.
RAILS_ENV
로 Rails.env
와 RAILS_ROOT
함께 Rails.root
.
Rails.application.config.whatever_you_want = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env]
초 기자 코드의 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
"#{Rails.root.to_s}"
;"#{Rails.root}"
공장.
Rails.root.join('config', 'config.yml')
대신 권장 합니다"#{Rails.root.to_s}/config/config.yml"
AppName::Application.config.custom
레일> = 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
속성 아래의 사용자 정의 구성으로 Rails 구성 오브젝트를 통해 고유 코드를 구성 할 수 있습니다 .
예
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 단계 : config / initializers / 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']
Rails 4.2 및 5의 최신 멋진 기능을 위해 이것을 업데이트하고 싶었습니다. 이제 모든 config/**/*.rb
파일 에서이 작업을 수행 할 수 있습니다.
config.x.whatever = 42
(그리고 그것은 x
거기에 리터럴 입니다. 즉, config.x.
말 그대로 그 것이어야합니다 . 그런 다음에 원하는 것을 추가 할 수 있습니다x
)
... 앱에서 다음과 같이 사용할 수 있습니다.
Rails.configuration.x.whatever
자세한 내용은 여기를 참조하십시오 : http://guides.rubyonrails.org/configuring.html#custom-configuration
x
.
You can configure your own code through the Rails configuration object with custom configuration under either the config.x namespace, or config directly. The key difference between these two is that you should be using config.x if you are defining nested configuration (ex: config.x.nested.nested.hi), and just config for single level configuration (ex: config.hello).
출처 : 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'
순전히 편리하지만 키를 기호로 표시하는 것을 선호합니다.
John for Rails 3.0 / 3.1과 비슷한 것을 사용하지만 파일을 먼저 구문 분석합니다.
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'] %>
Rails 4
사용자 정의 구성 yaml을 작성하고 방법과 유사한 방식으로로드하여 앱에서 사용 가능하게하려면 database_configuration
.
당신 만들기 *.yml
, 내 경우에는 내가 레디 스 구성 파일을 필요로했다.
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]
Rails.configuration.redis_configuration = YAML.load_file("#{Rails.root}/config/redis.yml")[Rails.env]
입니다. 그러나 레일 4.2 이상에서 smathy의 대답 은 아마도 더 간단한 방법 일 것입니다.
나는 simpleconfig를 좋아 한다 . 환경별로 구성 할 수 있습니다.
에 대한 내 답변을 참조하십시오 응용 프로그램 매개 변수를 저장하는 가장 좋은 장소는 어디에 있습니까 : 데이터베이스, 파일, 코드 ...?
다른 파일에 대한 간단한 참조라는 점에서 변형입니다. environment.rb가 지속적으로 업데이트되지 않고 거기에 응용 프로그램 관련 내용이 없습니다. 당신의 질문에 대한 구체적인 대답은 아니지만, 그것이 Rails 방식입니까?
Rails 초기화에서 설정을 사용하고 환경별로 설정을 구성 할 수 있습니다
# 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'] 또는 Settings.email의 두 가지 방법으로 설정을 가져올 수 있습니다.
setting.yml이 없을 때 발생하는 메시지와 함께 사용자 정의 구성에 가장 좋은 방법은 없습니다.
config / initializers / 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]
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
YAML::ENGINE.yamler = 'syck'
작업이에 대한 stackoverflow.com/a/6140900/414220