読者です 読者をやめる 読者になる 読者になる

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