Herokuのreview appsでアプリケーション毎にelasticsearchを利用する
review appsでもelasticsearchを無料プラン内で自動的に設定して、運用をしてみたかったので色々試してみたらできた記録
1. searchkickを導入する
elasticsearchの機能/設定を簡単にrailsに組み込むために、こちらのgemを利用する
Gemfile
gem 'searchkick'
して、 bundle install
2. herokuのaddonとしてbosaiを追加する
staging環境に関して、いつもaddonを追加している通り、market placeなどからbosaiを検索し、これを追加する
3. ELASTICSEARCH_URLにBONSAI_URLを設定する
searchkickはELASTICSEARCH_URLをelastic searchで参照できる場所と認識するため、こちらにはBONSAI_URLを設定する必要がある
そのために、review appsにbonsaiが追加され、その環境変数が設定された後に以下のようなrake taskを lib/tasks/bootstrap_review_app_tasks.rake
などといったファイルとして追加する
ここで定義しているタスクは、review appsの環境変数 ELASTICSEARCH_URL
に対して、ENV['BONSAI_URL']
で取得できる値を設定するというものになっている
また、 HEROKU_API_TOKEN
に関してはherokuのプロフィールページから参照することができるので、そちらを利用する
desc 'Bootstrap review app' namespace :dev do task bootstrap: ['db:schema:load', 'db:seed_fu'] do heroku = PlatformAPI.connect_oauth(ENV['HEROKU_API_TOKEN']) heroku.config_var.update(ENV['HEROKU_APP_NAME'], 'ELASTICSEARCH_URL' => ENV['BONSAI_URL']) end end
4. review appsの起動スクリプトを編集する
3で定義したスクリプトを実行する処理をapp.jsonのpostdeployの項に対して以下のように記述する
postdeployなどに関してはこちらを参照:Release Phase | Heroku Dev Center
{ "scripts": { "postdeploy": "bundle exec rake dev:bootstrap" } }