Sinatraを使ったWebアプリ開発 データベース編

はじめに

先日、Railsの勉強のために現場で使える Ruby on Rails 5速習実践ガイド
という本でタスク管理アプリを作成しました。
そこでよりRailsの理解を深めるためにもSinatra
タスク管理アプリを実装することにしました。
今回はSinatra,PostgreSQL,ActiveRecordをデータベースの設定に
ついてまとめました。

database.ymlのproduction設定(Herokuにデプロイすることを想定)

productionにurl: <%= ENV['DATABASE_URL'] %>を追加

# database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  timeout: 5000
  host: localhost
  port: 5432
  username: 
  password: 

development:
  <<: *default
  database: sinatra_development

test:
  <<: *default
  database: sinatra_test
  
production:
  url: <%= ENV['DATABASE_URL'] %>

ActiveRecordとの連携

database.ymlに記載した<%= %>部分でエラーが出たためロードする際に
ERB.newで読み込みできるように変更

# app.rb
require 'erb'

configure :development, :test do
  ActiveRecord::Base.configurations = YAML.load(ERB.new(File.read('config/database.yml')).result)
end

configure :production do
  ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'])
end

感想

RailsActiveRecordを使用する際はRailsがよしなにしてくれるが
Sinatraの場合database.ymlを読み込む記述が必要になる。
今回、SinatraActiveRecordを使用する際のdatabase.ymlの読み込む方法を
知ることができた。
また、database.ymlで<%= %>を使っている場合は、
読み込む際にERB.newが必要なこともわかった。