indilog

Ruby/Rails/React/Goなどに関して自分が勉強したことなどを投稿しています

Herokuのreview appsでアプリケーション毎にelasticsearchを利用する

review appsでもelasticsearchを無料プラン内で自動的に設定して、運用をしてみたかったので色々試してみたらできた記録

1. searchkickを導入する

elasticsearchの機能/設定を簡単にrailsに組み込むために、こちらのgemを利用する

github.com

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"
  }
}