ローカルで動かしてから意外と苦労したので、備忘録です。
メモ
- 大きな流れは以下を参照。
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
現在、長時間の遅延投稿がうまくいくか様子見状態です。アドレスを変えたり、紹介ページを整えたりしてますので、まだ非公開です。少々お待ちください。