8

環境変数のファイルを読み込む方法はありますか?

bashには、使用できるenv.shファイルがあります

env.sh

foo="bar"

バッシュファイル

set -a
source env.sh

これにより、ruby スクリプトで宣言したかのように foo を使用することができます。

また、このファイルにパスワードを保存できるように、このファイルを読み取れないようにする方法はありますか?

4

3 に答える 3

6

ユーザー/管理者が個人的な環境用に変更するファイルの例を提供し、そこから環境にデータを入力する必要があるように思えますが、おそらくそのファイルに機密情報がリポジトリに含まれないようにする必要があります。注: ファイルごとのセキュリティは、ファイルの場所、オペレーティング システム、およびサーバー ソフトウェアによって対処されます。

このような場合は、構成しているプログラムの管理者/ユーザーから要求される種類のテンプレートを保持するファイルを提供できます。

Ruby には、 のように機能し、使用しているシェルの環境を保持するENV定数があります。Hash

例として、公に誰とでも共有される environment.rb.sample というファイルがあります。手順があり、ユーザーが自由に変更できるテンプレートと、ファイルを にコピーする手順が含まれていますenvironment.rb。サンプル ファイルは次のようになります。

# environment.rb.sample
# Copy this file to environment.rb and change the name and password to your credentials
ENV['temp_user_name'] = 'Foo Bar'
ENV['temp_password'] = 'Dazz Kezz

ファイルは、おそらく次の場所にコピーされます。

# environment.rb
ENV['temp_user_name'] = 'Joe Admin'
ENV['temp_password'] = 'Super Secure Password'

これを読み込んで使用するファイルは、ソフトウェアのユーザー/管理者が自由に変更できる Ruby ファイルであり、このように公開されています。

# load_environment
require './environment'
puts ENV['temp_user_name']
puts ENV['temp_password']

これにより、ファイルがロードENVされ、アプリケーションのグローバル スコープの定数である が使用されます。

ファイルのアクセス許可は、システムのユーザー/管理者によって管理され、システム上の他の機密情報と同様に保護されます。機密ファイルは、リポジトリの無視メカニズムにもリストされている必要があります。絶対に公開してはいけません。

于 2013-08-03T05:51:53.780 に答える
2

ローカル変数の目的は、メソッド定義またはブロック内で一時的に使用することです。そのような環境の外で、特にファイル間で使用すると、その目的が無効になります。それを行う必要はなく、Ruby にはそれを行う簡単な方法がありません。

変数を正しく使用していて、ファイル間で変数を共有したい場合は、インスタンス、クラス、またはグローバル変数などの他のタイプの変数にする必要があります。または、環境を設定する目的で、定数を使用する必要があります。このうち、グローバル変数と定数は、ファイルに書き込んで、別のファイルに読み込んで使用することができます。

ファイル-a.rb

$foo = 1
FOO = 2

ファイル-b.rb

load "file-a.rb"
$foo # => 1
FOO # => 2

インスタンス変数とクラス変数は、クラスまたはそのインスタンスに属しているため、そのような環境で定義する必要があります。また、別のファイル内で同じクラスを再度開いて、別のファイルにロードすることができます。

ファイル-a.rb

class Bar
  @@foo = 1
  def initialize; @foo = 2 end
end

ファイル-b.rb

load "file-a.rb"
Bar.class_variable_get("@@foo") # => 1
Bar.new.instance_variable_get("@foo") # => 2
于 2013-08-03T05:27:50.887 に答える