環境変数のファイルを読む方法はありますか? bashでRubyのファイルから変数を読み込む
私が使用できるファイルenv.shを持って
env.sh
foo="bar"
bashのファイル
set -a
source env.sh
これは私だけの場合と同様にFOOを使用できるようになります私はルビーのスクリプトでそれをdelcaredていた。
また、このファイルにパスワードを保存できるように、このファイルが読み取れないことを確認する方法はありますか?
環境変数のファイルを読む方法はありますか? bashでRubyのファイルから変数を読み込む
私が使用できるファイルenv.shを持って
env.sh
foo="bar"
bashのファイル
set -a
source env.sh
これは私だけの場合と同様にFOOを使用できるようになります私はルビーのスクリプトでそれをdelcaredていた。
また、このファイルにパスワードを保存できるように、このファイルが読み取れないことを確認する方法はありますか?
、しばらくおそらく、そのファイルをリポジトリ内の機密情報と一緒に持つことを避けてください。注:ファイルごとのセキュリティは、ファイルの場所とオペレーティングシステム、およびサーバーソフトウェアによって解決されます。
この場合、構成するプログラムの管理者/ユーザーから必要とされる種類のテンプレートを保持するファイルを提供できます。
RubyはHash
のように動作し、使用しているシェルの環境を保持する定数であるENV
を持っています。
例として、誰でも公然と共有される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
を使用しています。
ファイルのアクセス許可は、システムのユーザー/管理者によって管理され、システム上の他の機密情報と同様に保護されます。機密ファイルは、リポジトリの無視メカニズムにもリストされている必要があります。公開されるべきではありません。
はい、あり、そしてあなたがそれを使用しなければならないいくつかの奇怪な、不可解な理由であれば、それはevalのだ:
eval(File.read("name_of_var_file"), binding)
本当に、本当に正当な理由がない限り、これを使用しないでくださいは、
あなたが実際にやっていることが、設定ファイルを書くことであれば、YAMLを使用してください。
config.yaml:このようなファイル
foo: "bar"
は、次のようにアクセスすることができます。
require 'yaml'
conf = YAML.loads(File.read("config.yaml"))
conf['foo'] #=> 'bar'
これは標準的な手法はもちろんのこと、安全で管理可能です。
、OS、設定、など
ローカル変数の目的は、メソッド定義またはブロック内で一時的に使用することができます。そのような環境の外部で、特にファイル間でそれを使用することは、その目的を凌駕します。あなたはそれをする必要はありません。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
それは理にかなっています、私はパスワードなどを自分のプログラムから守ろうとしていたので、そういう形でそれらをロードしようとしていたのです。これは単なるスクリプトであり、クラスを作成する予定はありません –
名前と値のペアのファイルを解析するのは簡単です。何を試しましたか?そして、誰にファイルを読めないようにしたいのですか? –
@theTinMan私はファイルのためにまだ何も試していない、私は迅速なGoogle検索を行ったと何も私が探していたので、私はそれが可能だったと誰にも読めないファイル –