Rubyを知らないひとがSinatraを使ってみる話 2013年3月版
Rubyとか全然知らないけどSinatraを調べて試してみた自分のための簡単なメモ。 参考は以下など。
ツールなど
それぞれのバージョンはこんなの。
[root@localhost mob_conf_gen]# bundle list
Gems included by the bundle:
* backports (3.1.1)
* bundler (1.3.2)
* cgi_multipart_eof_fix (2.5.0)
* daemons (1.1.9)
* eventmachine (1.0.3)
* fastthread (1.0.7)
* gem_plugin (0.2.3)
* haml (4.0.0)
* mongrel (1.1.5)
* rack (1.5.2)
* rack-protection (1.4.0)
* rack-test (0.6.2)
* sinatra (1.3.5)
* sinatra-contrib (1.3.2)
* tilt (1.3.5)
ファイルいろいろ
最終的にはこんな感じ。あとは、staticなりmodelsなりviewsなり、適当に置いていけばいいみたい。
[root@localhost myproject]# ls -la
total 60
drwxrwx---. 1 root vboxsf 646 Mar 11 12:39 .
drwxrwx---. 1 root vboxsf 1156 Mar 8 16:56 ..
drwxrwx---. 1 root vboxsf 102 Mar 11 11:53 .bundle
-rwxrwx---. 1 root vboxsf 190 Mar 11 11:56 Gemfile
-rwxrwx---. 1 root vboxsf 813 Mar 11 11:56 Gemfile.lock
-rwxrwx---. 1 root vboxsf 283 Mar 11 12:22 app.rb
-rwxrwx---. 1 root vboxsf 71 Mar 11 12:39 config.ru
drwxrwx---. 1 root vboxsf 102 Mar 11 10:48 vendor
Gemfile
pom.xmlのdependenciesタグみたいなもの。環境も指定したうえで必要なライブラリを書ける。
最終的なGemfile
source 'https://rubygems.org'
gem 'sinatra'
gem 'haml'
gem 'rack'
group :development do
gem 'mongrel'
gem 'sinatra-contrib', :require => 'sinatra/reloader'
end
config.ru
Rackupの起点になるファイル。 #\で起動オプションが書ける。 http://arika.org/2011/07/04/options-in-config-ru/
#\ --server mongrel
require 'app'
map '/app' do
run MyApp
end
app.rb
Sinatraアプリ。
require 'bundler'
Bundler.require
class MyApp < Sinatra::Base
configure :development do
Bundler.require :development
register Sinatra::Reloader
end
get '/' do
'index'
end
get '/hello' do
'Hello, Frank.'
end
コラム:rubygemsは不要?
require 'rubygems' は1.9系以上ならいらないらしい。 でも、上記のコードは1.8.7の環境でも動く。これは、/usr/bin/rackup のあたまで
require 'rubygems'
してるから。
[root@localhost ~]# head /usr/bin/rackup
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'rack' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
なるほどねー。rackupを使わないなら require 'rubygems' 必要。 そして、普通にirbしただけならもちろん、 require 'rubygems' 必要。
irb(main):001:0> require 'bundler'
LoadError: no such file to load -- bundler
from (irb):1:in `require'
from (irb):1
irb(main):003:0> require 'rubygems'
=> true
irb(main):004:0> require 'bundler'
=> true
Bundlerでgemをインストール
bundle install --path vendor/bundle
起動
rackup
すれば、ワーキングディレクトリのconfig.ruをみていい感じに起動してくれる。
curl http:/localhost:9292/app
でレスポンスが返るはず。
Webrickの代わりにMongrel使う
普通にrackupするとWebrickが起動して遅い。なので、Mongrelを使ってみる。
Gemfileに
gem 'mongrel'
を追記してインストール。
bundle install
サーバー指定して起動。
rackup -s mongrel
毎回指定するのは面倒なので、config.ruに書く。 http://arika.org/2011/07/04/options-in-config-ru/
config.ru
#\ --server mongrel
require 'app'
map '/app' do
run MyApp
end