[rails] Rails3からSinatraを呼ぶ
Rails3からはSinatraとか他のRackベースアプリケーションが呼べるというのは様々な記事に載っているのですが、実例が見つからないので実際にやってみました。
1. railsプロジェクトを作成する
$ rails new rinatra
2. sinatraアプリケーションを作成する
$ mkdir sinatra $ emacs sinatra/app.rb
作成したsinatraアプリケーションは以下のとおり。っていうか単なるハローワールド
require 'rubygems' require 'sinatra' get '/hello' do "Hello Sinatra" end
$ cd rinatra $ vi Gemfile
source 'http://rubygems.org' gem 'rails', '3.0.0' gem 'sinatra' #<= これを書き足す # Bundle edge Rails instead: # gem 'rails', :git => 'git://github.com/rails/rails.git' gem 'sqlite3-ruby', :require => 'sqlite3' (以下略)
$ bundle install vendor/bundle
4. sinatraアプリケーションをrequireする
$ vi config/initializers/sinatra.rb
require "#{Rails.root}/../sinatra/app"
5. routesを設定してsinatraアプリケーションを呼べるようにする(ここ本命)
$ emacs config/routes.rb
Rinatra::Application.routes.draw do mount Sinatra::Application, :at => 'sinatra' #<= これを書き加える (以下略)
とここまでやったった上で rails server を起動して
http://localhost:3000/sinatra/helloにアクセスすると
sinatra のハローワールドが表示されました。
ちなみに rake routes はこんな感じ
$ rake routes (in /home/yalab/project/rinatra) sinatra /sinatra {:action=>"sinatra", :to=>Sinatra::Application}
ただ http://localhost:3000/sinatra にアクセスして sinatra の get '/' を呼ぶことはなぜかできませんでした。この辺り詳しい方いましたらコメントで教えていただけるとうれしいです。