133

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

environment.rb

AUDIOCAST_URI_FORMAT = http://blablalba/blabbitybla/yadda

よく働く。

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

4

14 に答える 14

82

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
于 2011-01-18T13:18:46.223 に答える
56

レール >= 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の公式ガイドが言うように:

プロパティの下のカスタム構成を使用して、Rails 構成オブジェクトを使用して独自のコードを構成できますconfig.x

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メソッドの公式リファレンス| Rails公式ガイド

于 2016-07-16T13:59:55.217 に答える
25

ステップ 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']
于 2013-02-09T13:27:41.057 に答える
17

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

于 2015-01-29T22:23:09.217 に答える
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/yadda' APP_CONFIG[:audiocast_uri_format] => 'http://blablalba/blabbitybla/yadda'

純粋に便利なことですが、私は自分のキーをシンボルとして表現することを好みます。

于 2012-11-14T06:29:56.577 に答える
5

私は 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'] %>
于 2011-08-11T16:11:17.040 に答える
2

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.ymlbyにアクセスする方法と同様Rails.configuration.database_configuration[Rails.env]

于 2015-03-20T19:14:40.750 に答える
0

アプリケーションパラメーターを保存するのに最適な場所はどこですか : データベース、ファイル、コード...?に対する私の回答を参照してください。

別のファイルへの単純な参照であるという点で、あなたが持っていたもののバリエーション。environment.rb が常に更新されているわけではなく、アプリ固有のもののヒープが含まれていないことがわかります。「Rails のやり方ですか?」というあなたの質問に対する具体的な回答ではありませんが、おそらくそれについての議論があるでしょう。

于 2009-11-08T21:16:19.077 に答える
0

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
于 2017-04-07T07:15:48.120 に答える
0

私はsimpleconfigが好きです。これにより、環境ごとの構成が可能になります。

于 2009-03-03T22:58:47.467 に答える