メモです

メモです

HerokuでSinatraが動かない

【問題】

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を間に挟むことで、サーバフレームワークSinatraRailsなどの各Rubyフレームワークに個別に対応する手間が省け、Rackに対応するだけでよくなる。逆にRubyフレームワーク側もApacheなどの各サーバフレームワークに個別に対応する手間が省ける。

RailsもRackエンドポイントだからRackアプリケーションらしい

 

Railsのときには自動的に生成されて特に意識していなかったので、なかなかRackまで思い当たらず少し修正に手間取った。

 

【参考文献】

http://route477.net/d/?date=20080716

Rack解説 - Rackの構造とRack DSL - Qiita