10

私は気が狂っていますか、それとも ActionMailer の SMTP ユーザー名とパスワードを実際の (開発/運用) 構成ファイルに保持するのは悪い考えですか? 暗号化された場所に保存するか、少なくとも Mercurial プッシュから除外する必要があるようです。

現在、プッシュを実行する前にソース ファイルからパスワードを削除しているだけですが、私が使用している方法よりもスマートな方法が必要です。:)

おそらく、別のユーザー(暗号化されたパスワードで既に保存されている)としてデータベースに保存し、プログラムで取得する必要がありますか?

4

2 に答える 2

12

機密情報を保存するために、リポジトリに保存されていないアプリケーション構成ファイルを使用します。これが私がやった方法です:

  1. ディレクトリに を追加app_config.ymlしますconfig。その内容は次のようになります。

    smtp_password: kl240jvfslkr32rKgjlk
    some_other_password: 34hg9r0j0g402jg
    and_so_on: lkn$@gJkjgsFLK4gaj
    
  2. 次の内容でディレクトリに a を追加preinitializer.rbします。config

    require 'yaml'
    APP_CONFIG = YAML.load(File.read(RAILS_ROOT + "/config/app_config.yml"))
    
  3. APP_CONFIG次のように、変数の値をパスワードに置き換えます。

    smtp_password = kl240jvfslkr32rKgjlk # old version
    smtp_password = APP_CONFIG['smtp_password'] # new version
    

リポジトリに含まれていないことを確認してapp_config.ymlください。ただし、チェックインされているサンプル ファイルを作成して、その中にあるべきもののサンプルを表示することもできます。アプリケーションをデプロイするときは、それapp_config.ymlがサーバーに保存されていることを確認してください。標準の Capistrano デプロイメントを使用している場合は、ファイルを共有フォルダーに置き、デプロイメント タスクを更新して、現在のリリースのディレクトリにそのファイルへのシンボリック リンクを作成します。

于 2010-03-03T01:13:44.757 に答える
1

ジミーの答えは完璧です(+1)。Githubはすべての言語に.gitignoreファイルを推奨しており、Railsはここにあります。config / *。ymlが含まれているため、config/ymlファイルはリポジトリにありません。で始まります。おそらく良い動きです。

Capistranoを使用して、デプロイ時にこれらのことを要求します。データベースの場合と同じ方法でセットアップします。

task :my_silly_task do 
    sendgrid_password = Capistrano::CLI.password_prompt("Sendgrid password: ")
    require 'yaml'
    spec =  {... whatever yaml you need -- probably what Jimmy said...}
    run "mkdir -p #{shared_path}/config" 
    put(spec.to_yaml, "#{shared_path}/config/mailer_config.yml") 
end
于 2011-08-15T08:27:32.020 に答える