Archit!! RSSフィード Twitter

2017-09-14

Heroku Pipelineでステージング環境のDBをReview Appsにコピー

現在開発が継続中のシステムがあるのだが、Heroku上で稼働している。

先日セールスフォースの阿部さんのWebinarでそのHerokuのPipelineについて知る機会があり、感動のあまり早速取り入れることにした。それと同時に開発フローをGitHubフローに変更。このあたりは、Herokuとチーム開発のおいしいレシピ?HerokuとGitHubを連携してCI/CDを実現する (1/5):CodeZine(コードジン)の記事に詳しい。実際、ボクが受けたWebinarはこの記事をベースにしたものだった。

もともとテスト環境用にappを用意していたので、それをステージング用に設定すればPipelineが完成。

ところが少し問題が。ステージング用appはもともとテスト用なのでDBが完備されている。一方、この環境をベースにしたReview Appsの方はDBが整備されていない。もちろん、Heroku Postgresのadd-onは追加され、DATABASE_URLも個別のものが設定されているが肝心の中身がないのだ。

そこで、Review Appsが作成される際に、ステージング用appからDBの中身をコピーするようにしなければならない。このことは、こちらのマニュアルの注意書きにちゃんと書かれている。

試行錯誤の結果、以下のようにしたらできた。

  • ステージング環境に環境変数STAGING_DATABASE_URLを用意し、DATABASE_URLの内容をコピー。
  • Review Appsではその内容を引き継げるようにapp.jsonに記述。これは、
    "env": {
        "STAGING_DATABASE_URL": {
          "required": true
        },
    
    のように記述する。
  • app.jsonのpostdeployスクリプトDBのコピーコマンドを記述する。
    "scripts": {
       "postdeploy": "pg_dump $STAGING_DATABASE_URL | psql $DATABASE_URL"
    },
    

これで、ステージング環境のDBが丸ごとコピーされる。

ただ、このやり方にも少し不満がある。それは、Herokuは定期的にDATABASE_URLを値を変えるのだが、その時に手動でSTAGING_DATABASE_URLも書き換えないといけない。このあたりも自動化できないものだろうか。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/architshin/20170914/1505366479
Connection: close