heroku上にsinatraで作ったアプリ上げるときのハマりどころ

herokuもsinatraも初心者な自分がハマった所と、対処法書いときます。

基本は、ユーザ登録をして
https://devcenter.heroku.com/articles/ruby
の通りに進めていけば良いのですが

HTMLのテンプレート使いたい

風の噂で、hamlがサクサク書けて良いと聞いたので、hamlを選択

Gemfileにhamlを追加
gem 'haml'
bundle installでhamlをインストール
bundle install
APPファイル(web.rb)でhaml読み込み
require 'haml'


これで、準備OK。

hamlテンプレートを指定する
get '/' do
  haml :index
end

と書いてやれば、index.hamlファイルをテンプレートとして利用可能。

# -*- coding: utf-8 -*-

require 'rubygems'
require 'sinatra'
require 'haml'

# ここだと、渡せないよ
@hoge = "この位置で宣言しても渡せません"

get '/' do
  # ここで、宣言すれば
  # 変数の受け渡しも可能
  @foo = "bar"
  haml :index
end
テンプレートはどこに置けば良いの?

sinatraのデフォルトだと、viewsディレクトリを見に行くらしいので

mkdir views

ディレクトリ作成。
viewsの"s"をお忘れなく。

cssとかは?

静的ファイルは、publicディレクトリ

mkdir public

同じようなコードで毎回テンプレート名指定するのがめんどくさい

パスと同じテンプレートファイル名ならば、これでいけた。

get '/:path' do
  path = params[:path]
  haml path.intern
end

hamlでちょっと凝ったことしたい

HTML5のフォーマットで書きたい

hamlのrequire文の下辺りに

set:haml, :format => :html5

で、フォーマットを指定する。

HTMLエスケープも自動でしたい

エスケープ設定も追加で

set:haml, :format => :html5, :escape_html => true
共通部分はレイアウトとしてまとめたい

layout.hamlという名前でレイアウトファイルを作成すれば
自動的にレイアウトとして認識してくれます。
ビューファイルは、= yieldで呼べる。
以下、body宣言までのレイアウトが、ビューを呼ぶ例。

!!!
%html{:lang => "ja"}
  %head
    %meta{:charset => "UTF-8"}
  %body
    / ここでビューを呼ぶ
    / =ではなく、!=にしないとエスケープされるので注意
    != yield

呼ばれるビューファイル側のインデントは、インデント無しの状態から始める。
bodyの子要素だからと、インデント2つ分から始めたら怒られた。

要素の属性値がたくさんあって、1行が長くなるのがいや

rubyのハッシュに詰めてから渡すと多少改善される

:ruby
  opts = {
    :src => "https://www.google.com/calendar/embed?src=XXX
    :style => "border: 0",
    :width => "800",
    :height => "600",
    :frameborder => "0",
    :scrolling => "no"
  }
%iframe{opts}

herokuでアプリの名前変えたらコミットできなくなっちゃった

# 現在の設定確認
% git remote -v 
heroku     git@heroku.com:strong-day-3354.git (fetch)
heroku     git@heroku.com:strong-day-3354.git (push)
# 変更
# アプリ名をAAAに変えた場合
% git remote set-url heroku git@heroku.com:AAA.git
# 反映確認
% git remote -v                                    
heroku     git@heroku.com:AAA.git (fetch)
heroku     git@heroku.com:AAA.git (push)

感想

使ってみての感想は、sinatraは記述量が少なくて便利。
命名規則は知らないとさっぱり。


hamlは、噂通りサクサクかける。
<、>と閉じタグ書かなくて良いのが楽。
rubyコードと記法が似ているから、覚えやすい。


裏側は、サクサクだな。
後は、表のデザインセンスがあれば、、、