ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

Heroku 複数のアプリ間でHerokuPostgresデータベースを共有する



やったこと

Herokuの同一アカウント上で運営している2つのアプリ間でデータベースを共有した。


前提


環境変数の取得

Heroku Postgresの共有に関する解説ページはこちら。
Heroku Dev Center
Heroku Postgres
Sharing Heroku Postgres between applications
https://devcenter.heroku.com/articles/heroku-postgresql#sharing-heroku-postgres-between-applications


Herokuにログイン後、次のコマンドを入力する。

$ heroku addons:attach origin_app::DATABASE --app new_app


これで環境変数が割り当てられる。

Attaching postgresql-infinite-***** to new_app... done
Setting HEROKU_POSTGRESQL_[Color] config vars and restarting new_app... done, v***

[Color]には各々色名が入る。


Herokuアプリで接続する

割り当てられた環境変数をつかってコードを書く。

  • 割り当てられた色名を例としてBRONZEとする
  • origin_appにはusersテーブルがある
  • usersのカラム
    • id (int)
    • name (varchar)


new_app/main.rb

require 'sinatra'
require 'active_record'

class User < ActiveRecord::Base
    establish_connection(ENV['HEROKU_POSTGRESQL_BRONZE_URL'])
end

get '/' do
    # usersテーブルの全てのレコードを取得する
    user = User.new
    @users = user.all

    erb :index
end


new_app/views/index.erb

<html>
    <body>
        <ul>
            <% @users.each do |user| %> 
            <li><%= "#{user[:id]} #{user[:name]}" %></li>
            <% end %>
        </ul>
    </body>
</html>


今回の環境

Ruby 2.7.1p83
Sinatra 2.0.8
Active Record 6.0.3
pg 1.2.3