Λάδι Βιώσας

http://profile.hatena.ne.jp/kenkitii/

Ubuntu 10.04 TLS に nginx + passenger + sinatra を入れたメモ(2)

前回の続き。さくっといきます

mkdir tmp views public

して、config.ru ↓作成

require 'application.rb'

disable :run
set :root, Pathname(__FILE__).dirname
run Sinatra::Application

application.rbの中身はこんなん↓(マイ雛形)

# -*- coding: utf-8 -*-
require 'rubygems'
require 'sinatra'
require 'haml'

configure do
  set :views, "#{File.dirname(__FILE__)}/views"
end

error do
  e = request.env['sinatra.error']
  Kernel.puts e.backtrace.join("\n")
  'Application error'
end

helpers do
  # add your helpers here
end

not_found do
  'not found'
end

get '/' do
  haml :index
end

とりあえず hello world というか phpinfo() 的な views/index.haml

!! XML
!!! Strict
%html
  %head
    %title sinatrainfo
    %meta{:"http-equiv"=>"Content-Type", :content=>"text/html", :charset=>"utf-8"}
    %link{:rel=>"stylesheet", :type=>"text/css", :href=>"style.css"}
  %body
%p sinatrainfo
table
  - @env.each do |k, v|
    %tr
      %td= k
      %td= v

views/style.css

body {
  font-size: 8pt; }

table, tr, td, th {
  border: 1px solid black;
  border-collapse: collapse; }

th, td {
  writing-mode: tb-rl; }

ちなみに、sinatra って、__END__ 以下にテンプレート書くことが出来るインラインテンプレートって機能があって超お気に入りなんですが↓こんなん

require 'sinatra'
get '/' do
  haml :index
end
__END__

@@ layout
%html
  = yield

@@ index
  %div.title Hello world!!!!!

なぜか nginx + passenger の環境ではインラインテンプレートが使えなかった。うーんなぜだろうなぜかしら・・・

おまけ

CGI環境で sinatra動かす場合こんな感じで dispatch.cgi 作成

#!/usr/bin/ruby

load 'application.rb'

set :run => false, :environment => :production
Rack::Handler::CGI.run Sinatra::Application

.htaccess はこんな感じ↓で

AddHandler cgi-script cgi
DirectoryIndex dispatch.cgi

<Files application.rb>
deny from all
</Files>

RewriteEngine On
RewriteBase /~hoge/helloworld/ # 適当に修正
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) dispatch.cgi/$1 [L]