回答:
データベーステーブルに保存する必要のない一般的なアプリケーション構成では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
Rails> = 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 envの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に似たものを使用しますが、最初に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'] %>
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]
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)}
次の2つの方法で設定を取得できます 。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]
YAMLをconfig / setting.ymlに作成します
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