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]