2

パブリッククラウドおよびPaaS環境で実行する場合、本番環境で保護する必要のあるアプリの秘密はたくさんあります。一般的なものはmysqlユーザーとパスワードのdatabase.ymlエントリですが、他のエントリもあります。あなたのGoogleアプリの秘密、Facebookアプリの秘密、...リストは続きます。これらの本質的に構成パラメーターを保護する明確な方法はありません。誰がアクセスできるかは保証されていないため、これらをファイルに入れたくない場合があります

Herokuでは、環境変数を介して物事を指定できます。Cloudbees(Java PaaS)では、これらをJavaシステムプロパティとして指定できます。HerokuとCloudbeesの両方に、この構成パラメーターをアップロードするためのコマンドラインユーティリティがありますが、開発と本番の両方でこれを簡単に機能させるためのサポートはありません。

問題は、開発で簡単に開発できるが、開発で本番シークレットを使用できないように、パラメーターをどのように構成するかです。

ENV理想的には、rubyおよびjruby環境で動作するgemと、開発中の開発設定があり、実際の本番シークレットがまたはからプルされたYMLファイルでシークレットを指定できるPaaSがありますjava.lang.System.getProperty

##
# file: config/secure_config.yml
development:
  db:
    user_id: 'dev_mysql_user'
    password: 'my_dev_pwd'
  google:
    app_id: 'xxxxx' # this is the secret for the dev app so it can be visible
    app_secret: 'xxxxx'
# ...
production:
  db:
    user_id: <%= get_secure_config %>
    password: <%= get_secure_config %>
  google:
    app_id: <%= get_secure_config %>
    app_secret: <%= get_secure_config %>

get_secure_configヘルパーがRubyまたはjRubyから、ENVまたはその場合に値を取得する場所。java.lang.System.getProperty最後に、必要に応じてアプリでそれらを使用できます。たとえば、database.ymlまたはデバイスコードでgoogleを使用して認証します。

# config/database.yml
# ...
production:
  adapter: mysql2
  username: <%= SecureConfig.db.user_id %>
  password: <%= SecureConfig.db.password %>

そして、さらにクールにするために、gemは、構成をPaaSにプッシュできる実行可能ファイルも提供する必要があります。

~/work/myproject> bundle exec secure_config -push_to_heroku

また

~/work/myproject> bundle exec secure_config -push_to_cloudbees
4

2 に答える 2

3

フィガロをチェックしてください。それはあなたが求めているものとほぼ同じです。

機密データをgitを無視したYAMLファイルに配置すると、のアプリで利用できるようになりますENV。また、変数を使用してHerokuインスタンスを構成するためのrakeタスクも提供します。

于 2012-10-04T17:52:31.873 に答える
2

ダニエルライトが上で示唆したように、フィガロは素晴らしいです!これは、RubyonRailsに必要なすべてのことを実行します。CloudbeesPaaSサービスのJVMシステムプロパティを介したレールとプロパティのJRubyでも同じサポートが必要でした。私はフィガロをフォークしてこれらの拡張を行い、レーザーレモン/フィガロにプルリクエストを送信しました。それまでの間、gemファイルでgitディレクティブを使用してプルできます。

gem 'figaro', '0.4.2', :git => "git://github.com/RedMicaInc/figaro.git"

主な違いは以下に記載されています

それはどのように機能しますか?

それは本当にうまくいきます。

そこにいくつかの同様の解決策があり、多くの自家製の試みがあります。ほとんどの名前空間は、Config(または同様の)名前空間の下にある構成です。それは問題ありませんが、アプリケーション環境を説明する場所はすでにあります… ENV

ENVは単純な文字列のキーと値のペアのコレクションであり、アプリケーションの構成に最適です。

これらの構成パラメーターは、FigaroSettingsオブジェクトのプロパティとしても使用できるようになります。したがって、というプロパティがある場合は、またはを使用してコードまたはMY_PROP構成ファイルで使用できます。FigaroSettings.my_propFigaroSettings.MY_PROP

ベースアプリケーションの場合JRUBY、JVMシステムプロパティに格納されているプロパティも同様の方法で利用できます。たとえば、というプロパティがある場合は、MY_JAVA_PROPとしてアクセスできますFigaroSettings.MY_JAVA_PROP。Javaのプロパティでは大文字と小文字が区別されます。

追加のボーナスとして、これはまさにHerokuまたはCloudbeesのアプリの構成方法です。したがって、を使用してRailsアプリを構成ENVすると、Herokuにデプロイするように設定されています。Cloudbeesの場合、ENVまたはJVMプロパティを同様に使用できます。FigaroSettings.<property>

Cloudbeesとどのように連携しますか?

Cloudbeesは、同様の方法でアプリケーション構成を提供します。

通常、JVMシステムプロパティを介してアクセス可能なアプリケーションパラメータを設定するには、cloudbeessdkを使用してコマンドラインから次の手順を実行します。

cloudbees config:set -a <my_app> PUSHER_APP_ID=8926
cloudbees config:set -a <my_app> PUSHER_KEY=0463644d89a340ff1132
cloudbees config:set -a <my_app> PUSHER_SECRET=0eadfd9847769f94367b

しかし、フィガロはまさにそれを行うためのレーキタスクを提供します!とにかく走れ:

rake figaro:cloudbees

オプションで、Cloudbeesアプリの名前を渡すことができます。

rake figaro:cloudbees[my-awesome-app]

使用されているコマンドを確認したいだけの場合は、実行できますrake figaro:heroku_test

于 2012-10-10T13:09:28.793 に答える