web-dev-qa-db-ja.com

カスタム設定変数をレールに定義する方法

Railsアプリケーションにカスタム設定変数を追加する方法とコントローラでそれらにアクセスする方法を考えていました。例えば、development.rbと言う設定ファイルでupload_directoryを定義し、自分のいずれかでそれにアクセスできるようにしたいのです。コントローラ。

S3アクセス、秘密鍵を使ってyamlファイルを追加したいのなら、Railsアプリでそれをどのように初期化すればいいのか、そして自分が定義した値にどのようにアクセスすればいいのか。その設定ファイルで。

330
Shiv

アップデート1

非常にお勧め:私は Rails Config gemを使って、きめ細かい制御を提供しています。

Update2

迅速な解決策が必要な場合は、 Jack Pratt's answer をチェックしてください。

以下の私の最初の答えはまだうまくいきますが、この答えは古くなっています。アップデート1と2を見ることをお勧めします

元の答え:

手っ取り早い解決策としては、Ryan Batesによる "YAML Configuration File" screen cast を見ることは非常に役に立つはずです。

要約すれば:

# config/initializers/load_config.rb
APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env]

# application.rb
if APP_CONFIG['perform_authentication']
  # Do stuff
end
163
khelll

Rails 3では、アプリケーション固有のカスタム設定データをアプリケーション設定オブジェクトに入れることができます。設定は初期化ファイルまたは環境ファイルで割り当てることができます - 与えられたアプリケーションMyAppのために言う:

MyApp::Application.config.custom_config_variable = :my_config_setting

または

Rails.configuration.custom_config_variable = :my_config_setting

設定を読むには、設定せずに設定変数を呼び出すだけです。

Rails.configuration.custom_config_variable
=> :my_config_setting

UPDATE Rails 4

Rails 4ではこれに対する新しい方法があります=> http://guides.rubyonrails.org/configuring.html#custom-configuration

enter image description here

371
Jack Pratt

Rails 3.0.5では、次のアプローチが私のために働きました:

config/environments/development.rbに、書く

config.custom_config_key = :config_value

custom_config_keyは他のファイルから参照することができます。

Rails.application.config.custom_config_key
68
Rob Dawson

これはRails 3.1で動作します。

config/environment.rb(または特定の環境を対象とする場合はconfig/environment/..):

YourApp::Application.config.yourKey = 'foo'

これは、コントローラまたはこのようなビューでアクセス可能になります。

YourApp::Application.config.yourKey

(YourAppはアプリケーション名に置き換えてください。)

:これはRubyのコードなので、たくさんの設定キーがある場合はこれを実行できます。

config/environment.rbにあります。

YourApp::Application.configure do
  config.something = foo
  config.....
  config....
  .
  config....
end
31
Alain Beauvois

レール4

あなたのカスタム変数をyamlファイルに入れると仮定します。

# config/acme.yml
development:
  :api_user: 'joe'
  :api_pass: 's4cret'
  :timeout: 20

それらをロードするためのイニシャライザを作成します。

# config/initializers/acme.rb
acme_config = Rails.application.config_for :acme

Rails.application.configure do
  config.acme = ActiveSupport::OrderedOptions.new
  config.acme.api_user = acme_config[:api_user]
  config.acme.api_pass = acme_config[:api_pass]
  config.acme.timeout  = acme_config[:timeout]
end

アプリのどこにいても、これらの値にアクセスすることができます。

Rails.configuration.acme.api_user

Rails.application.config_for :acmeがあなたのacme.ymlをロードして正しい環境を使うことは便利です。

27
pymkin

追加の宝石なしで、Rails 4.2以降あなたは単にRails.application.config_for :hiを使うことによってconfig/hi.ymlをロードすることができます。

例:

  1. touch config/passwords.yml

        #config/passwords.yml
        development:
          username: 'a'
          password: 'b'
        production:
          username: 'aa'
          password: 'bb'
    
  1. touch config/initializers/constants.rb

    #config/initializers/constants.rb
    AUTHENTICATION = Rails.application.config_for :passwords
    
  1. これで、アプリケーション内のあらゆる場所でAUTHENTICATION定数を使用できます。

    #Rails c production
    :001> AUTHENTICATION['username'] => 'aa'
    
  2. 次にpasswords.ymlに追加します。gitignoreecho /config/passwords.yml >> .gitignore、例を作成してくださいあなたの快適さのためのファイルcp /config/passwords.yml /config/passwords.example.ymlそしてそれから実際の生産価値であなたの生産コンソールのあなたの例のファイルを編集してください。

19
lakesare

Rails 4.2の最新のクールなもの用にこれを更新したいだけです。これで任意のconfig/**/*.rbファイル内でこれを実行できます。

config.x.whatever.you.want = 42

...これはあなたのアプリで以下のように利用可能になります。

Rails.configuration.x.whatever.you.want

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

12
smathy

まさにそれをやっているこのきちんとした宝石をチェックしてください: https://github.com/mislav/choices

これにより、機密データがオープンソースプロジェクトに公開されることはありません。

8
Flov

私はYAML設定用の簡単なプラグインを作成しました: Yettings

これはkhelllの答えのコードと同じように機能しますが、あなたはこのYAML設定ファイルを追加するだけでいいです:

app/config/yetting.yml

プラグインは動的にあなたのアプリのクラスメソッドとしてYML設定にアクセスすることを可能にするクラスを作成します:

Yetting.your_setting

また、固有の名前を持つ複数の設定ファイルを使用したい場合は、次のようにapp/config内のサブディレクトリにそれらを配置できます。

app/config/yettings/first.yml
app/config/yettings/second.yml

それからあなたはこのような値にアクセスすることができます:

FirstYetting.your_setting
SecondYetting.your_setting

環境ごとにオーバーライドできるデフォルト設定もあります。また、ymlファイル内でerbを使用することもできます。

4
johnmcaliley

私は settingslogic gemがとても好きです。セットアップと使用が非常に簡単です。

https://github.com/binarylogic/settingslogic

4
Rahil Sondhi

Herokuを使用している場合、またはアプリケーションの設定を環境変数として保持する必要がある場合は、 figaro gemが非常に役立ちます。

4
MikeH

Webインターフェースで変更可能にする必要があるグローバル設定値には Rails-settings を使うのが好きです。

2
cite

私たちが仕事でやろうとしているのは ActiveSupport Ordered Hash です。

これにより、環境ファイル内で設定を明確に定義することができます。

config.service = ActiveSupport::OrderedOptions.new
config.service.api_key = ENV['SERVICE_API_KEY']
config.service.shared_secret = ENV['SERVICE_SHARED_SECRET']
0
mdb29