0

セキュリティ上の理由から、製品のユーザー名とパスワードをバージョン管理にチェックインしたくありません。チェックインすれば、誰でも見ることができます。バージョン管理にチェックインされた database.yml ファイルは次のとおりです。

# /config/database.yml:
production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: desk_production
  pool: 5
  username: root
  password: password_here

ご覧のとおり、「password_here」はパスワードとしてチェックインされていますが、本番データベースに対してチェックされた場合、これは無効なパスワードです。基本的に、ライブ パスワードをバージョン管理にチェックインする以外に 2 つのオプションがあります。

  1. 実際の database.yml ファイルを本番サーバーのアプリケーション ルートの上のディレクトリに保存します。アプリのデプロイ時にそのファイルへのシンボリック lync を作成する capistrano レシピを作成します。これにより、基本的に、バージョン管理にチェックインされた database.yml ファイルが上書きされます。
  2. 実際の database.yml ファイルを保存しますが (オプション #1 と同様)、シンボリック lync を作成する代わりに、バージョン管理にチェックインされた database.yml ファイルにインポートします。これにより、システムはアプリがデプロイされるたびにサーバー上の既存のファイルを参照できるようになり、デプロイ担当者はパスワードの変更やシンボリック lync の作成について心配する必要がなくなります。また、サーバー セットに常駐する database.yml ファイルを設定して、デプロイヤーがそれを見ることができないようにすることもできます...

私は 2 番目のオプションが最も気に入っています。基本的には次のようになります。

# Config file permanently stored on the web server:
# ../app_root/database.yml (notice this is one level up from the app so it doesn't get written over)

# This is the file checked into version control:
production:
 << ../app_root/database.yml
4

1 に答える 1

3

または、環境変数から読み取ることができます。

production:
  ...
  password: <%= ENV['DB_PASSWORD'] %>
  ...

Rails アプリを起動するユーザーのプロファイルに環境変数が設定されていることを確認して、ENVハッシュで使用できるようにする必要があります。たとえば、私はしばしばdeployercapistrano を介してユーザーを使用してアプリを展開するのでexport DB_PASSWORD=the_password、そのユーザーの~/.bashrcファイル (展開先のシステムに適した場所であれば何でも) を設定しました。

このように、誰もがパスワードを設定する場所を知っているという意味でソース管理の一部ですが、パスワード自体はソース管理の一部ではありません。明らかに、その秘密を守る必要があります。

私にもすぐにはわかりませんでしたが、テンプレートと同様に、.ymlファイルにルビを埋め込むことができ.erbますが、環境変数自体に特定の特殊文字が含まれていると、このようなことが機能しない状況に遭遇しました。

于 2012-09-22T03:19:48.477 に答える