ProxyLocal ProxyLocal could proxy your local web-server and make it publicly available over the internet. ローカルのWebサーバーに他人にちょっとアクセスして欲しい時(何かの実験中とか)に便利なgem。 # app.rb: require 'rubygems' require 'sinatra' get '/' do ' ┐(´ー`)┌' end こういう糞アプリがあったとして、まずローカルで立ち上げる。 % ruby app.rb == Sinatra/1.2.6 has taken the stage on 4567 for development with backup from Thin >> Thin web server (v1.2.11 codename Bat-Shit
はまったのでメモっておく。 普通に以下のようにやるとエラーになってしまう。 %script{:type => 'text/javascript'} $(function(){ $('#new_link').click(function(){ alert('clicked'); return false; }); }); で、仕方なく以下のようにしたんだけど、微妙すぐる…と思ったんだが、 %script{:type => 'text/javascript'} $(function(){ $('#new_link').click(function(){ alert('clicked'); return false; }); }); HamlのAPI DocumentによるとFilterという機能があって以下のようにするとうまくいく。 :javascript $(function(){ $('#
Sinatraで書いているwebアプリに認証機能が必要になったので「sinatra-authentication」を使ってみたメモ。 概要Rubyでwebアプリを書くのに大人気のSinatra。でもweb開発で必要になる機能ってどんなフレームワークでもあんまり変わらないので、そのうち「認証機能が必要だよね」なんてことになる。 最初はRack::Auth::Basicを使っていたのだが、ユーザの追加 / 変更が面倒だったり、どうも挙動が不安定だったり(一定時間ログインできなくなるという謎の不具合が出たり)したので、他のライブラリを検討してみた。 自分でこんな感じのものを作ろうかなーとも思ったのだが、まずはあるものを使ってみよう、ということで「sinatra-authentication」を導入してみた。 環境CentOS 5.4MySQL 5.1.47apache 2.2.14ruby 1.
前回は、Sinatraバージョン1.0の概要を公式ドキュメントを手がかりとして、Sinatraを紹介しました。そして最後に、「Sinatraの先には、まだ地図がない」と言及しました。 今回は、「実世界のSinatra」と題して、実際にSinatraを利用して開発していくうえでの、筆者自身のロードマップを示していきます。 Sinatraとはいったい何か いきなりですが、Sinatraとはいったい何なのでしょう。 これは根本的な問いになりますが、Sinatraで開発を進める前に、ここをしっかり考えることが重要であると筆者は考えます。 素直に考えるならば、Sinatraはもちろん、広義のWebアプリケーションフレームワークの一つである、と答えられるでしょう。アプリケーションフレームワークのそもそもの定義が、「共通部分を再利用可能にし、開発を助けるもの」であるならば、Sinatraもこの例に
はじめに 第7回はRails以外のWebフレームワークの簡単な紹介と、SinatraでHello Worldアプリケーションを動かすところまでを解説しました。今回はSinatraで実際のアプリケーションを作り、SequelとHamlという2つのライブラリを紹介します。 Sinatraの特徴は、CGIスクリプトのようにファイル一つからアプリケーションが書ける気軽さです。CGIスクリプトといえば、代表的なものは何と言っても掲示板(BBS)です。そこで、今回はSinatraで掲示板アプリを作ってみました。ソースコードが少し長めなので、githubにて全文を公開しています。適宜参照しながら読み進めて下さい。ファイル構成は以下のようになっています。 start.rb アプリケーションの本体。 model/comment.rb 掲示板の書き込みを表すモデルの定義。 view/index.haml トッ
最近は仕事でSinatraアプリを書いたりしているので、Sinatraアプリを動かすためにはどのHTTPサーバを使うのがベストなのかが気になっている。(先に結論を書いておくけれど、どれがベスト、という唯一の選択肢は今のところありません。適材適所です。) SinatraはRackの上に構築されているので、Rackに対応したHTTPサーバーを使って動かす事になるのだが、この数がやたらと多く、どれを使えばいいのか迷う。代表的なものを挙げただけでも、WebRick, Mongrel, Thin, Unicorn, Passenger(Apacheとかに組み込んで使うやつ), FastCGI, (普通の)CGI、これぐらいは選択肢がある(いくつかHTTPサーバじゃない物も混ざっているが、Rackが対応してるという点は共通している)。 WebRickはそもそもパフォーマンスに重点を置いていないし、Mo
PerlCasual#02の懇親会で教えてもらった軽量WEBアプリケーションフレームワーク Dancer(公式サイト: http://perldancer.org/)を試してみました。 DancerってRubyのSinatraプロジェクトの移植として始まったみたいですね。Sinatra自体は使ったことないんでよく分かりませんがWEB上のサンプルコードを見ると、構文とか似たように見えます。 とりあえず、PODを参照しながら簡単に実験してみました。 インストール インストールはCPANから。 cpan Dancer 簡単なサンプル hello.pl #!/usr/bin/env perl use Dancer; get '/hello' => sub { "Hello, world" } dance; use strict、use warningsはすでにDancerによってロードされているの
こないだ言ってたばりったーは実はもう完成してたんだけど、なんかサンプルアプリのつもりが作ってるうちに段々ガチなフレームワークと化してきて、大したアプリじゃないのに中身は意外と複雑でしかもバグだらけ、みたいなことになってしまった。 うーんこれ公開してもいいけど参考になんねーよな、つか飽きたなーとか思って別の遊びを始めたら意外とそっちが楽しくなってきちゃって、こんなものが出来た。 faultier's Asagao at master - GitHub 何これ Plackを使ってSinatraっぽい感じでWebアプリを書ける雰囲気のフレームワークみたいな(弱々しく)。一応README.jaを読むとどんなものかは何となく伝わるんじゃないかしら。ドキュメントとサンプルアプリくらいは作ってみようとは思いますが、何ができるか試してみる際にはソース読んでくだしあ。(追記)簡単なサンプルコードとドキュメン
Sinatraはよくできたウェブアプリ開発用フレームワークだと思う。前にも書いたが、URLから呼び出されるメソッドを決定するところがよくできているし、依存するライブラリもRackだけなので使いやすい。beforeフィルタの存在やstatus, content_typeといったメソッドなど、細かいところまで開発がやりやすいように作られているように感じる。 しかし、SinatraはRubyで書かれているので、他の言語では使えない。趣味で書いているならRubyを使えばいい話なのだが、仕事だとそうもいかないこともあるだろう。 そこで、Sinatraに似た感じで使えそうなフレームワークを探してみた。 ※コメント欄などで教えていただいたものをいくつか追加しました。感謝! sinatra-on-perl perl用 http://code.google.com/p/sinatra/ 名前の通り、かなりS
サキとは彼女の自宅近く、湘南台駅前のスーパーマーケットで待ち合わせをした。彼女は自転車で後から追いつくと言い、僕は大きなコインパーキングへ車を停めた。煙草を一本吸ってからスーパーマーケットへ向かうと、ひっきりなしに主婦的な女性かおばあちゃんが入り口を出たり入ったりしていた。時刻は午後5時になる。時計から目を上げると、待たせちゃったわねと大して悪びれてない様子でサキが手ぶらでやってきた。 お礼に料理を作るとはいえ、サキの家には食材が十分足りていないらしく、こうしてスーパーマーケットに寄ることになった。サキは野菜コーナーから精肉コーナーまで、まるで優秀なカーナビに導かれるように無駄なく点検していった。欲しい食材があると、2秒間程度それらを凝視し、一度手に取ったじゃがいもやら豚肉やらを迷うことなく僕が持っているカゴに放り込んだ。最後にアルコール飲料が冷やされている棚の前へ行くと、私が飲むからとチ
nginx と thinの組み合わせが速いらしいので変更してみることにした。 現在運用しているのは Railsアプリ x 2 Sinatraアプリ x1 Webdav (git) webdavについては別途書くとしてとりあえずrailsアプリとSinatraアプリをthinに。リバースプロキシをnginxにしてみる。 ちなみに環境はCentOS 4.6 以下作業ログ nginxのインストール $ sudo su - # cd /usr/local/src # wget http://nginx.org/download/nginx-0.7.65.tar.gz # yum install pcre-devel zlib-devel openssl-devel # tar -zxvf nginx-0.7.65.tar.gz # cd nginx-0.7.65 // configure の参考
最悪だ。 Sinatra を CGI で動かそうとして、原因不明のエラーが発生し、原因を特定するまでに半日くらい要した。 ソース #! /usr/local/bin/ruby require 'rubygems' require 'sinatra' get '/' do 'Hello world!!' end 実行方法 % ruby sinatra.rb エラーの内容 ./sinatra.rb:6: undefined method `get' for main:Object (NoMethodError) from /home/yamamucho/local/lib/rubygems/custom_require.rb:31:in `gem_original_require' from /home/yamamucho/local/lib/rubygems/custom_require.r
Sinatraを0.9.2にupdateすると、以下のエラーになって組み込みのWEBrickで動かなくなってしまった。 /usr/lib/ruby/gems/1.8/gems/sinatra-0.9.2/lib/sinatra/base.rb:930:in `detect_rack_handler': Server handler (thin,mongrel,webrick) not found. (RuntimeError) from /usr/lib/ruby/gems/1.8/gems/sinatra-0.9.2/lib/sinatra/base.rb:862:in `run!' from /usr/lib/ruby/gems/1.8/gems/sinatra-0.9.2/lib/sinatra/main.rb:34 ...sinatra/base.rbの921行目「detect_r
SinatraやRailsは開発は楽だけどデプロイ方法がいろいろあって悩む。 最近はpassengerを使う方法が流行ってるけど、あいにく学校に置いたサーバーでサブドメインが使えないので同一ホスト名でapacheと共存させるしかない。 passengerでもRailsBaseURIだったか?を設定すればサブディレクトリでRack対応アプリを動かせるが、 今回は1年前からRails+mongrelのデプロイに使っているapache2のサブディレクトリをmongrelで起動してるrailsにプロキシする – 橋本詳解と同じ方法でSinatra+Thinをデプロイした。 Railsではmongrel_clusterで複数起動させたrailsにapache2のmod_proxy_balancerでアクセスを割り振ったが、同じ設定でsinatra+thinにも割り振れる。 結果、橋本商会 Twitt
目標的にはRailsの下にsinatraをミドルウェアとしてrackupするつもり。 現時点では単体で動かせれば良いのでその辺りまでかな。 rack,sinatra,thinはさくっとgem installしておきます。たぶんどれか入れればrackが入るはず。ログとってなかった。 nginxはソースファイルからインストールします。stableです。 # wget http://sysoev.ru/nginx/nginx-0.6.35.tar.gz # tar zxvf nginx-0.6.35.tar.gz # cd nginx-0.6.35 # ./configure --prefix=/usr/local/nginx --with-http_ssl_module # make # make install # cd /usr/local/nginx/conf # vi nginx.co
個人的にSinatraとLimonadeがマイブームなのですが、Sinatraに関して言えば、CGIで動かす方法は(本家のドキュメントとかでは)あまりフォローされていないようです。国内ではそれなりに記事もあるようなのですが、結局ソースに手を入れてしまう(Sinatraのソースに「Rack::Handler::CGI.run」をベタに書く)か、rackupで実行する方法かが多そう。でも、前者はCGI専用になってしまうのでいまいちだし、後者はシェルが2個実行されるのがどうにも美しくありません(現実的にはあまり問題にならないのかもしれませんが)。 そこでいろいろいじってみたところ、何とか良さげな方法ができました。 まずSinatraのソース。適当です。 require 'rubygems' require 'sinatra' set :run, true get '/?' do "hello"
Twitterには、ストリーミングAPIという、プッシュでリアルタイムに情報を受け取ることのできるAPIが用意されています。 これを使えば、定期的にポーリングをしたりすることなく、誰かが発言した時点で即座にメッセージを受け取れます。 しかし、これを使うためには、TCP接続をTwitterに対して張りっぱなしにしておく必要があり、Webアプリなどで使うのに敷居が高いと感じている人もいるのではないでしょうか。 今回は、「そんなことないよ、超簡単だよ」ということを、Rubyベースのサンプルで示したいと思います。 なぜそんなことが簡単にできるのか、その秘密を先に種明かしすると、Ruby用のWebサーバとして急速に人気を獲得し、デファクトの座をとりつつある「Thin」というWebサーバが、内部的にEventMachineという非同期サーバを使用しているので、その機能を使うことで、今までのWebアプリ
This page is also available in English. 始めよう SinatraはRubyで下記のような最小労力で手早くウェブアプリケーションを作成するためのDSLです。 # myapp.rb require 'rubygems' require 'sinatra' get '/' do 'Hello world!' end gemをインストールして動かしてみる。 sudo gem install sinatra ruby myapp.rb localhost:4567 を見る。 ルート Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンがペアになっています。 ルートはブロックに結び付けられています。 get '/' do .. 何か見せる .. end post '/' do .. 何か生成する .. end put '/' do .. 何か更
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く