Eyes, JAPAN Blog > Sinatra@CGI + Redcarpet

Sinatra@CGI + Redcarpet

murakami

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

こんにちは。徐々に暖かくなりつつある最近ですがいかがお過ごしでしょう?
会津はもう少しで桜が咲くかなーという感じです。

さて今日ですがタイトルにあるようにSinatraをCGIモードで動かしてRedcarpetを使おうという内容です。

別にSinatraならサーバーモードで動かせばいいじゃん・・・という声もありそうですが、よくありがちなCGI実行までが許可されているレンタルサーバーでSinatra使うというのがメインの目的です。

まず各々の紹介です


実装

まずは環境構築。以下の流れでぱぱっと

  1. Rubyビルド(必要なら)
  2. gemのパスの変更
  3. gem install sinatra redcarpet

以上です。簡単ですね、rubygems流石です。

で次に中身を作っていきます。
(対象ディレクトリ内で)

cd ~/www/
touch .htaccess
touch app.rb
touch index.cgi
chmod 705 index.cgi
mkdir public
mkdir public/css
mkdir public/js
mkdir public/img
mkdir views

とよくありがちな流れで作成します。

であとはindex.cgiにapp.rbを起動するコードを書いて、app.rbにsinatra用のコードを書けば終わりです。

# index.cgi
#!/home/USERNAME/local/bin/ruby

$LOAD_PATH.unshift '/home/USERNAME/local/lib'
ENV['GEM_HOME'] = '/home/USERNAME/local/lib/ruby/gems'

# -----

load './app.rb'

# -----

set :run, false # サーバーが起動しないように
set :environment, :cgi

# -----

Rack::Handler::CGI.run Sinatra::Application

 

# app.rb
#!/home/USERNAME/local/bin/ruby

$LOAD_PATH.unshift '/home/USERNAME/local/lib'
ENV['GEM_HOME'] = '/home/USERNAME/local/lib/ruby/gems'

# -----

require 'sinatra'

# -----

get '/' do
"HELLO!"
end

get '/test/:param' do
"#{params[:param]}"
end

とこんな感じになります。あとはMarkdownの表示ですので、たとえば

get '/test/markdown' do
<%= Redcarpet::Markdown.new(Redcarpet::Render::HTML).render("# Hello world and Markdown!") %>
end

とかするとMarkdownが解釈されて、http://<対象>/test/markdown にブラウザからアクセスした時に

Hello world and Markdown!

と表示してくれるはずです。
興味がありましたらお試しください。

—–
担当 : 村上(Markdown便利ですね)

Comments are closed.