読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

Twitter連携辞書サービス、herokuへのディプロイメモ

ローカルで動かしてから意外と苦労したので、備忘録です。

概要

共有データベースとワーカープロセスを使ったSinatraアプリケーションをherokuのCeladon Cedar上にディプロイする。

メモ

  • 大きな流れは以下を参照。

Getting started with Ruby on Heroku/Cedar

  • ワーカープロセスを使うのでdynoのスケールを指定。
heroku scale web=1 worker=1
  • 共有データベースを使うので、addonを追加
heroku addons:add shared-database
  • herokuはconfig/database.ymlを自動生成する。フォーマットはERB。これを呼び込むのにSinatraアプリのconfigure内で以下のようにしました。
configure do
  config = YAML::load(ERB.new(File.read('config/database.yml')).result)
  environment = Sinatra::Application.environment.to_s
  ActiveRecord::Base.logger = Logger.new(STDOUT)
  ActiveRecord::Base.establish_connection(config[environment])
  Delayed::Worker.guess_backend
end

YAMLはERBフォーマットにも対応という記事を見かけましたが、実際にはERB構文でエラーが出たので、明示的に対応しました。
ここさえ注意すれば、Rakefileはローカルの時から変更なしでmigrateも通りました。

  • Procfile

webプロセスにrackupを使用したらエラーが出たので、rubyを直接使いました。
Profile

worker: bundle exec rake jobs:work
web: bundle exec ruby server.rb -p $PORT

オプションpがなんのおまじないかわかっていません。この設定でデフォルトのポート80にアクセスできます。

  • ソースをディプロイして、データベースをマイグレートする。
git push heroku master
heroku run rake db:migrate


現在、長時間の遅延投稿がうまくいくか様子見状態です。アドレスを変えたり、紹介ページを整えたりしてますので、まだ非公開です。少々お待ちください。