Rubyのフレームワーク「Sinatra」を使ってみた(設置編)

最近お邪魔しているFLOSS桜山で、主催者である河合先生が、「注目しているRubyのフレームワークはSinatra」とか言ってて、まあ、そうなのかで終わるところだったんだけど、その理由を聞いて俄然興味を持った。
それが

「僕、簡単なのが好きなんだよねぇ」

はいはい、僕も大好物ですよ、簡単なの。

ということで

「たくさんのこと覚えるの苦手」
「ちゃっちゃと作りたい」
「出来れば軽いのが最高」

な人に最適なフレームワークSinatraのサイトがこちら。

Sinatra
Sinatra

もう雰囲気がフレームワークって感じじゃないのが気に入った!
でらクール!!

で、トップページみたら、飛び込んできたサンプルコードががこれ。
# myapp.rb
require 'rubygems'
require 'sinatra'

get '/' do
  'Hello world!'
end

良いねえ、お手軽な雰囲気がプンプンするではないか。


で、早速動かそうとしたらはまりました。
ローカルで動かすなら、公式サイトのドキュメントに載ってるんだけど、CGIとして動かす方法が載っていない。

あ~でら不親切!
Rubyのフレームワークってみんなこんな感じなんだよね、ドキュメント。
Rubyistはみんなお金持ちってこと?
Coreserverみたいな激安レンタルサーバは使わないのかしら。

そこでなんとか見つけ出したのがこちらのサイト。
Sinatra を CGI スクリプトとして実行する - ursmの日記

助かりました、ホント。
ほとんど情報無いわ、フレームワークもシンプルなら、公式サイトのドキュメントもシンプルだわ、Rackもいまいちわからんわって状態だったので。

けど、これだけじゃイメージ通りに動きません。
参考サイトの通りに設定すると
get '/hello' do
  'Hello world!'
end


http://hogehoge.com/hoge.rb/hello

こんな感じでアクセスできた。

でも、そうじゃなくて
http://hogehoge.com/hello

といきたいわけです。

ということで、約1日かけてたどり着いたのがこちら。

#.htaccess

DirectoryIndex index.html index.php start.rb

AddHandler cgi-script .rb
Options +ExecCGI

SetEnv RUBYLIB /virtual/account/lib/site_ruby/1.8:/virtual/account/lib
SetEnv GEM_HOME /virtual/account/lib/ruby/gem

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*) start.rb/$1 [L]

もっとちゃんと書き方あるかと思いますが、まあ、これをみて察してください。

で、実際のアプリのコードはこんな感じ。
#/start.rb

require 'rubygems'
require 'sinatra'

set :run, false                #HTTPサーバ立ち上げないならfalse
set :environment, :production

get '' do                      #'/'だと駄目くさい
  'Hello world!'
end

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


こんな感じで
http://hogehoge.com/

でHello Worldが出ます。
泣ける。

これでやっと、Sinatraワールドが楽しめます。

長くなったので、今回はここまで。
余力があれば、DB周りやView周りのことも書きたいです。

※htaccessのSetEnvの箇所は大橋さんの記事を参考にさせていただきました(それまではstart.rbに直書きでした)。
htaccessに記述した方が何かとスマートかなと思います。
ありがとうございました。
Sinatra、結構いいかも | コンピューターと人の触媒になるのを目指して

coreserverにrailsをインストールした時のメモ

前のエントリーと前後するけど、一応残して置くか。
前のエントリー:
coreserverにruby twitter gemをインストールした時のメモ

なんでrailsいれたかというと、前のエントリーでruby twitter gemを入れようとしたら全然インストールできなかったので、他のパッケージならどうなんだろと思って、入れてみたのだった。

ごめんねrails。
まだ当分君を使いこなす自信がないよ。
ちなみにrailsは超余裕でインストールできた。

> gem install rails
Successfully installed rake-0.8.4
Successfully installed activerecord-2.3.2
Successfully installed actionpack-2.3.2
Successfully installed actionmailer-2.3.2
Successfully installed activeresource-2.3.2
Successfully installed rails-2.3.2
6 gems installed
Installing ri documentation for rake-0.8.4...
Installing ri documentation for activerecord-2.3.2...
Installing ri documentation for actionpack-2.3.2...
Installing ri documentation for actionmailer-2.3.2...
Installing ri documentation for activeresource-2.3.2...
Installing RDoc documentation for rake-0.8.4...
Installing RDoc documentation for activerecord-2.3.2...
Installing RDoc documentation for actionpack-2.3.2...
Installing RDoc documentation for actionmailer-2.3.2...
Installing RDoc documentation for activeresource-2.3.2...

> rails -v
Rails 2.3.2


イッツオートマチック!

coreserverにruby twitter gemをインストールした時のメモ

これは躓きました。
誰も教えてくれないんだもの!
Rubyは凄いです、凄く進化してます。

gem install twitter

ってやれば、インストール出来ると至るところで言われていますが
ERROR:  Error installing twitter:
        httparty requires jnunemaker-crack (>= 0.1.0, runtime)

はい、駄目です。
なんだかようわからんけど、jnunemaker-crackってのをインストールすれば良いんじゃね?と思って
gem install jnunemaker-crack

ってやっても駄目。
そんなパッケージあるかいな!と言われる。
そんなこと言われても、jnunemaker-crackで検索してもgoogleで2件しか出てこないし、英語だし。
みんな困ってないのかな?

runtimeってことは、モジュールかなんかでPHPの拡張モジュールみたいにコンパイル時に指定してあげないと駄目?
とか思って諦め気味。
ローカル上にあるCentOSでroot権限なら上手く行くんじゃね?と思ってやってみたけど、同じ結果。

んがー!!なんなんだー!!

ますますソースからのコンパイルしか無いのか?と思っていたところ、GitHubのサイトがやたらひっかかる事に気がつく。
もしかして、GitHub上に公開されているソースをrubygemsでインストール出来るんじゃね?と思って、ゴニョゴニョ検索していたら、なんと出来ました!
> gem install jnunemaker-crack --source=http://gems.github.com/
Successfully installed jnunemaker-crack-0.1.0
1 gem installed
Installing ri documentation for jnunemaker-crack-0.1.0...
Installing RDoc documentation for jnunemaker-crack-0.1.0...


続けてゴー!
> gem install twitter
When you HTTParty, you must party hard!
Successfully installed httparty-0.4.1
Successfully installed twitter-0.4.4
2 gems installed
Installing ri documentation for httparty-0.4.1...
Installing ri documentation for twitter-0.4.4...
Installing RDoc documentation for httparty-0.4.1...
Installing RDoc documentation for twitter-0.4.4...


一応確認!!
> gem list
*** LOCAL GEMS ***

actionmailer (2.3.2)
actionpack (2.3.2)
activerecord (2.3.2)
activeresource (2.3.2)
activesupport (2.3.2)
hpricot (0.7)
httparty (0.4.1)
jnunemaker-crack (0.1.0)
rails (2.3.2)
rake (0.8.4)
twitter (0.4.4)


railsも入ってますが、無事インストールできた模様!!

なんですか、これは。
GitHubってそういうことだったのですか?
PHPのPEARなんかとは比べ物にならないぐらいの自由な雰囲気というか、敷居の低さというか。
すげー。

※2009/4/7追記
jnunemaker-crackというパッケージ名は、jnunemakerさんのcrackって意味らしい。
GitHubでは、いろんな人が一つのパッケージをフォークしているので、こんな感じでパッケージを見分けるらしい。
gem source add http://gems.github.com

ってやっておけば、わざわざ--source=http://gems.github.com/ってオプション付けなくてもいいらしい。
WEB+DBマガジンが教えてくれました、ありがとう。

coreserverにrubygemsをインストールした時のメモ

いろんなサイトを参考にインストールした時のメモ。

まずは.bashrcファイルを編集。
.bashrc

#ruby
export PATH=$PATH:$HOME/bin:$HOME/lib/ruby/gem/bin
export RUBYLIB=$HOME/lib/:$HOME/lib/ruby
export GEM_HOME=$HOME/lib/ruby/gem

このパスになるのかあ・・・。
これだとどのサブドメインもこのパスを参照する事になるのかしら。
ちょっと嫌かもなあ。
Ethnaのpear-local使い慣れてると・・・。

直ぐに反映。
source ~/.bashrc


ダウンロードしてインストール。
cd tmp/
wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
tar xvzf rubygems-1.3.1.tgz
cd rubygems-1.3.1/
ruby setup.rb config --prefix=$HOME


バージョン確認して表示されればインストールOKらしい。
gem -v


途中で一回
Killed

とかでたので、何度も
ruby setup.rb config --prefix=$HOME

すればOKらしい。

次はなんかライブラリいれたいなー。

「たのしいRuby 第2版」読みました

たのしいRuby 第2版 Rubyではじめる気軽なプログラミング

これだけちゃんと技術書を読んだのは久しぶりだ。
実際技術書を腰を据えて読んだのは数冊ぐらいしかないと思うけど。

Rubyの入門書として有名な本書は、プログラミングすること自体が始めての人でも読めるように書かれていると、いろんなところで見かけたので、僕にもわかるだろうってことで購入。
もうかれこれPHPやCOBOLを何年もやってますが、全然自信ないので。

で、読み終えた感想が「本当にプログラミングしたこと無い人でも読める?」だ。
確かに最初の方は凄く優しいんだけど、後半は結構飛ばしている感じがするけどなあ。
僕は後半で1P読むのに20分とかかかったりしたし。(全然自慢にならないけど)

ちょうど僕ぐらいの人にちょうど良いのかなと思った。
そうだなあ、プログラムは初めてじゃないけどオブジェクト指向とかなんだかわかったようなわかってないような。
全体的に自信ない人?かな。

この本を読んで、本当に勉強になった。
何事も体系的に学ぶことって必要だなあ。
あと、本を読んで頭でっかちになるよりも、ある程度実践で試して、どこかのタイミングで本で学ぶと一気にレベルアップできる気がする。
PHPの本も1冊ぐらいちゃんと読まないといけないなあと思ったもん。
やっぱ本というメディアは、勉強するのにとても相性が良いんだな。

肝心のRubyという言語については、PHPと比較してとても「今っぽい言語」って感じがした。
Rubyと比較すると、PHPは初心者にとってとっつき易く気軽に使える反面、使い込んでいくといろんなところに矛盾が発生してしまい、返って複雑になってしまっているのかなという印象を持った。
今までそんなこと考えもしなかったけどさ。

あとRubyは言語としての思想がはっきりしている気がするな。
その思想が、全体にちゃんと行き渡っている感じもする。
コミッターが少ないからなのかわからんけど。

こりゃ人気出るわと思った。
うちの新人君にも、この本読ませてあげたいと思ったもん。
(残念ながらPHPの本読んでるけど)

JavascriptやActionscriptやったことある人は、いろいろとっつき易いかもしれないかなとも思った。
完全なオブジェクト志向の言語同士だからか、表記も似てるし。

なんだかんだ読むの3週間ぐらいかかったなあ。
450Pぐらいあるから、一日20Pぐらいは読んでいたってことか、結構頑張ったなあ。

さて、本日届いてしまったRubyの本をもう一冊読むかな。
今回もRuby自体の本。
Railsに早く入りたいものだ。
今度はいつ読み終わるんだろう。
この本より少し難しそうだから不安だ。

アーカイブ

2010

2009

2008

2007

コンタクト

longkey1[at]gmail[dot]com