1. ホーム
  2. ruby-on-rails

[解決済み] railsの開発環境のENV変数を自分のコードに設定することは可能ですか?

2023-02-26 03:22:40

質問

私は、bashでENV変数を設定することができることを知っています。

export admin_password = "secret"

しかし、私のrailsのソースコードのどこかにそれを行う方法があるのでしょうか?私の最初の試みは、次のようなものでした。 environment/development.rb

ENV['admin_password'] = "secret"

しかし、うまくいきませんでした。何か方法があるのでしょうか?

どのように解決するのですか?

[更新情報]

一般的な問題であれば、「旧解答」にある解決方法が有効ですが、このセクションでは、あなたのコメントから明らかになった具体的な質問に回答しています。

質問で指定されたとおりに環境変数を設定することができるはずです。例として、私はHTTP基本認証を使用するHerokuアプリを持っています。

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :authenticate

  def authenticate
    authenticate_or_request_with_http_basic do |username, password|
      username == ENV['HTTP_USER'] && password == ENV['HTTP_PASS']
    end
  end
end

# config/initializers/dev_environment.rb
unless Rails.env.production?
  ENV['HTTP_USER'] = 'testuser'
  ENV['HTTP_PASS'] = 'testpass'
end

ということで、あなたの場合は

unless Rails.env.production?
  ENV['admin_password'] = "secret"
end

設定が再読み込みされるように、サーバーを再起動することを忘れないでください!

[古い回答]

アプリ全体の設定については、以下のような解決策を検討するとよいでしょう。

ファイルを作成する config/application.yml に、アクセスできるようにしたいオプションのハッシュを記述します。

admin_password: something_secret
allow_registration: true
facebook:
  app_id: application_id_here
  app_secret: application_secret_here
  api_key: api_key_here

ここで、ファイル config/initializers/app_config.rb を作成し、以下を記述します。

require 'yaml'

yaml_data = YAML::load(ERB.new(IO.read(File.join(Rails.root, 'config', 'application.yml'))).result)
APP_CONFIG = HashWithIndifferentAccess.new(yaml_data)

これで、アプリケーションのどこからでも APP_CONFIG[:admin_password] にアクセスすることができます。(なお、イニシャライザには ERB.new を含むので、YAML ファイルは ERB マークアップを含むことができることに注意してください)。