Railsアプリケーション。1つの構成オプションを作成する必要があります。すべての環境で同じにすることができます。environment.rb
で設定すると、ビューで使用できます。それはまさに私が欲しいものです...
environment.rb
AUDIOCAST_URI_FORMAT = http://blablalba/blabbitybla/yadda
よく働く。
しかし、私は少し不安です。これは良い方法ですか?もっとヒップな方法はありますか?
データベーステーブルに保存する必要のない一般的なアプリケーション構成の場合、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']
詳細については this Railscast をご覧ください。
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 env。のconfig/foo.ymlをロードするのに便利です。
yaml
ファイルを使用したくない場合
As 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
このトピックに関する追加情報:
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に似たものを使用しますが、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
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]
Omer Aslamのエレガントなソリューションに基づいて、キーをシンボルに変換することにしました。唯一の変更点は次のとおりです。
all_config = YAML.load_file("#{Rails.root}/config/config.yml").with_indifferent_access || {}
これにより、シンボルとして値をキーとして参照できます。
AppConfig[:Twitter][:key]
これは私の目にはきれいに見えます。
(私の評判はOmerの返信にコメントするほど高くないので、回答として投稿しました)
simpleconfig が好きです。環境ごとの構成が可能です。
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
アプリケーションパラメータを保存するのに最適な場所はどこですか:データベース、ファイル、コード...?
別のファイルへの単純な参照であるという点でのバリエーション。 environment.rbは絶えず更新されておらず、アプリ固有のヒープが含まれていないことがわかります。 「Rails way?」という質問に対する具体的な答えではありませんが、おそらくそれについていくつかの議論があるでしょう。
グローバルアプリケーションスタックから設定にアクセスすることを好みます。ローカルスコープの過剰なグローバル変数を回避します。
config/initializers/myconfig.rb
MyAppName::Application.define_singleton_method("myconfig") {YAML.load_file("#{Rails.root}/config/myconfig.yml") || {}}
そしてそれにアクセスします。
MyAppName::Application.myconfig["yamlstuff"]
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