woshidan's blog

あいとゆうきとITと、とっておきの話。

HerokuでRailsでないRubyのwebのアプリケーションを動作させたい

具体的にはsinatraとか.

APIの説明見てたら、さくっとsinatra使えますよね、
設定ファイル、うちのサービスから見えるようにherokuとかのサーバーに上げといてね、
という感じに書いてあったところ、案の定、詰みかけたので、メモ。

そーいえばsinatra爆速、とか言うのをどこかで聞いたことあったけど、APIとか簡単に作りたいのだったら、
railsだgrapeだというよりsinatra派になってしまうかもしれない。

データベース周りとかさえ確認できれば。

必要なファイル

1:Procfile
とりあえず

web: bundle exec rackup config.ru -p $PORT

と書いておきます。

2:config.ru
1:に書かれた内容に従ってwebサーバを立ち上げたときの環境設定を行うファイルの読み込み処理などを書きます。
sinatraの場合はこう。

require 'bundler'
Bundler.require

require './config.rb' # sinatraでルーティングを書いているrbファイル
run Sinatra::Application

3:Gemfile,Gemgfile.lock
heroku側のサーバーに使用するrubyのgemをインストールするために必要

4:2:で読み込むrbファイル
ルーティングなど環境変数の設定が書かれたrbファイル。
今回は、こんな感じ。

require 'rubygems'
require 'sinatra'

get '/' do
erb :index # views/index.erbの読み込み
end

1:Procfile

Procfileはherokuのアプリケーションの中で行われるプロセスの立ち上げ等を書くファイルだと理解しています。

ここにwebプロセスの立ち上げを

web: bundle exec rackup config.ru -p $PORT


というふうに書いておかないとエラーになります。

RailsだとRakefileにあたるのでしょうか?

ここに書かれたプロセスによってweb Dyno(Webプロセス用のサーバ)やcron Dyno(Cronプロセス用のサーバ)が確保されます。
詳しい用語が間違っていたら突っ込んでください。
何せ、今回ではじめてサーバってphpとかあげたら勝手にwebサーバになる訳じゃないんだ!
ってなったので。

phpのファイルをProcfileなしの単体でつっこんだときは、
webプロセスを1つ立ち上げるようになっているみたいです。
(だからしらなくて詰んだ次第です)


2:config.ru

サーバでアプリケーションを立ち上げるとき、
環境設定を行うためのプログラム郡を呼び出すのに使われる。

Rails new でアプリを作ったばかりのconfig.ruの内容は、こう。

# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment', __FILE__) 
run Rails.application

3:Gemfile

割愛します。brewとかも一回きちんと調べたい...。

4:2:で読み込むrbファイル

Railsの場合はcondig.ruに
Rails.applicationって書いてあってなんだろう、
sinatraの場合はgemに入っているんでしょうが、と思っていたのですが
railsの場合も'rails'gemに入っているのでしょう、
とりあえず疑問に思う前に読めし。反省。

config/application.rb中にRailsアプリケーション名のmoduleがあり、
Rails.applicationのRailsクラスが中に書いてあるのでアプリケーション独自の設定をしたい場合はここのRailsクラスをオーバーライドします。

ActiveRecordの時間の設定についてなどいろいろコメントが書いてありますので
今度またじっくり読む。