2016-05-18 15 views
-1

/etc/environmentファイルをリモートEC2インスタンスで編集した後で、レールアプリケーションが新しい環境変数を認識できるようにするにはどうすればよいですか?サーバを再起動しないでrailsアプリケーションに環境変数をロード

secrets.ymlに新しい(マイナー)ものを頻繁に追加しますが、私はサーバーを再起動したくないし、既存のシークレットを使いたくないです。

+0

コメント無しコメントしますか? – vedant1811

+0

明らかに答えは、その不可能です:( – vedant1811

答えて

0

あなたのconfig/spring.rbに行を追加することができるはずです。

Spring.watch "config/secrets.yml" 

これは、変更がsecrets.ymlファイルで発生したとき、春は検出することができるようになります。

しかし、ファイル内で環境変数を変更したことをアプリに知らせる方法を実際に尋ねているのであれば、それは不可能です。設定値はファイルで検出されるかもしれませんが、環境変数はシェル環境で検出されます。それらをシェルにロードして効果を発揮させる必要があります。これにより、サーバーの停止、新しい変更の環境への供給、サーバーの再起動が必要になります。

ファイル(.yml、.xml、.iniなど)の設定値とシェルスクリプトの環境変数の違いを理解することは重要です。なぜなら、その適用方法と使用可能性が全く異なるからです。

2

Linuxでは、すべてのプロセスが親プロセスからenvvarsを継承し、値は参照ではなく値によって渡されます。また、クロージャのように振る舞いません。したがって、子プロセス(あなたのrails/ruby​​アプリケーションプロセス)は親プロセス(あなたがあなたのrails/ruby​​アプリケーションを起動したシェルプロセス)の新しい環境変数を取得しません。

だから、それは不可能です。しかし、dotenvfigaroのような宝石を使用して環境変数でファイルを見て、それらが変更されたときに再ロードすることができます。

関連する問題