1. [Rails] GitHubに上げたくないパスワード等の管理方法

    RailsアプリケーションをGitHubで管理していると、データベースのパスワードやメールの設定など公開されるととんでもないことになって困る情報の管理方法。

    単純に ignore してると config/database.yml はともかく、config/environments/production.rb 等は変更時に面倒です。

    ざっと調べると環境変数として管理するのがスマートなようですね。

     

    環境変数もファイルに保存、起動時オプション、apache等サーバconfに書く、gemをインストールと色々あります。

    起動時オプションはスペルミスもあるし何より毎回指定は面倒。

    サーバconfファイルはどんな環境でも意識せず扱いたいし、アプリ内で解決したいので却下。

    gemをインストールするほどか?うーむ。。

     

    ということで、Rails内のファイルで環境変数を管理、そのファイルをignore、GitHub では README等に指定するべき変数を書いておく、という方法で管理してみます。

    やり方としては、まず config/settings.yml などとして設定ファイルを作成します。

    ちなみにこのファイルをignoreしないと全てが無駄になってしまうので、忘れず確実に .gitignore に追加しておきましょう。

     

    # config/settings.yml
    defaults: &defaults
      MAIL_USER: test
      MAIL_PASSWORD: hogehoge
      DB_USERNAME: root
      DB_PASSWORD: root
      DB_SOCKET: /Applications/MAMP/tmp/mysql/mysql.sock
    
    development:
      <<: *defaults
    
    test:
      <<: *defaults
    
    production:
      <<: *defaults
      DB_USERNAME: foobar
      DB_PASSWORD: hogehoge
      DB_SOCKET: /var/lib/mysql/mysql.sock
    

     

    続いて、config/application.rb でこのファイルを読み込むようにします。

    ネットで調べた情報ですが、Railsのconfig内の読み込みは application.rb が一番目のようなのでここに書いておけば問題ないと思います。

     

    # config/application.rb内に追記
    ENV.update YAML.load_file('config/settings.yml')[Rails.env] rescue {}
    

     

    あとはどこからでも ENV['MAIL_USER'] 等で呼び出せます。

    例として database.yml はこんな感じになります。

     

    # database.yml
    ...略
    production:
      username: <%= ENV['DB_USERNAME'] %>
      password: <%= ENV['DB_PASSWORD'] %>
      socket: <%= ENV['DB_SOCKET'] %>
    ...
    

     

    今のところこれで問題ないのですが、もっといい方法あれば教えて下さい。

     

    Posted by Shunsuke Hayashi on 2015年03月09日
    Categories Ruby on Rails