メモです

メモです

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