ruby on rails - 読み込み - 私のRailsアプリケーションのカスタム設定オプションを作成する最も良い方法は?




ruby on rails 機能 (10)

私は私のRailsアプリケーションのための1つの設定オプションを作成する必要があります。 すべての環境で同じにすることができます。 私はenvironment.rbで設定した場合、私の見解で利用できることがわかりました。これはまさに私が望むものです...

environment.rb

AUDIOCAST_URI_FORMAT = http://blablalba/blabbitybla/yadda

よく働く。

しかし、私は少し不安です。 これは良い方法ですか? もっとヒップな方法がありますか?


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)}

あなたは、設定['email']またはSettings.emailの 2つの方法で設定を取得できます


Omer Aslamの洗練されたソリューションを基に、キーをシンボルに変換することに決めました。 唯一の変更点は次のとおりです。

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

これにより、記号で値をキーとして参照することができます。

AppConfig[:twitter][:key]

これは私の目のほうにやさしいようです。

(私の評判がオメールの返答にコメントするのに十分ではないので答えとして掲示される)


データベース、ファイル、コードなどのアプリケーションパラメータを保存する場所はどこですか?

あなたが持っていたものとは違って、別のファイルへの単純な参照です。 それは、environment.rbが絶えず更新されておらず、アプリケーション固有のもののヒープがないことがわかります。 あなたの質問に対する具体的な答えではありませんが、それはRailsの方法ですか?おそらくそこにいくつかの議論があります。


Rails 4

カスタム構成yamlを作成し、それを読み込んで(そしてあなたのアプリケーションで利用できるように)、 database_configurationと同じようにし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]


ステップ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']

このトピックに関するちょっとした情報:

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'

純粋に便利なことですが、キーをシンボルとして表現する方が好きです。


データベーステーブルに格納する必要のない一般的なアプリケーション構成では、 configディレクトリ内にconfig.ymlファイルを作成するのがconfig.ymlです。 あなたの例では、次のようになります。

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を参照してください。



私は、グローバルアプリケーションスタックを介して設定にアクセスすることをお勧めします。 私は、ローカルスコープ内の余分なグローバル変数を避けます。

config / initializers / myconfig.rb

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

そしてそれでアクセスしてください。

MyAppName::Application.myconfig["yamlstuff"]

私はちょうどRails 4.2と5の最新のクールなものをアップデートしたかったので、あなたのconfig/**/*.rbファイルの中でこれを行うことができます:

config.x.whatever = 42

(そして、そこにはリテラルxがありconfig.x.つまり、 config.x.はそのままでなければなりませんx後ろに任意のものを追加できます)

...これはあなたのアプリで利用可能になります:

Rails.configuration.x.whatever

詳細はこちら: http://guides.rubyonrails.org/configuring.html#custom-configuration : http://guides.rubyonrails.org/configuring.html#custom-configuration





environment