【問題】
HerokuにSinatraをつかったAppをデプロイした後、Appを開いても
「Application error
An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details.」
と出てしまう
【解決方法】
①Appのディレクトリにconfig.ruという名前のファイルを作り、
require './hoge'
run Sinatra::Application
を書き込む。
※hogeの部分は同じディレクトリ内にあるhoge.rbに合わせる。app.rbの場合、require './app'となる。
②その後、再度デプロイ
【解決までの流れ】
①再デプロイ後、ターミナルで「heroku restart --app application_name」を打つが変化なし。
②ターミナルで「heroku logs」を打ち、ログを確認すると「 at=error code=H10 desc="App crashed" 」「configuration /app/config.ru not found」が出ていた。
③Deploying Rack-based Apps | Heroku Dev Centerを見ながらconfig.ruを追加すると直った。
・config.ruについて
config.ruはRack用の設定ファイルで、SinatraはRackを使っているのでHeroku上で動かすときに必要。
・Rackについて
サーバフレームワークとRubyフレームワークの橋渡しをするもの。Rackを間に挟むことで、サーバフレームワークはSinatraやRailsなどの各Rubyフレームワークに個別に対応する手間が省け、Rackに対応するだけでよくなる。逆にRubyフレームワーク側もApacheなどの各サーバフレームワークに個別に対応する手間が省ける。
※RailsもRackエンドポイントだからRackアプリケーションらしい
Railsのときには自動的に生成されて特に意識していなかったので、なかなかRackまで思い当たらず少し修正に手間取った。
【参考文献】
http://route477.net/d/?date=20080716
Rack解説 - Rackの構造とRack DSL - Qiita