Sinatra

herokuセットアップ、sinatraを動かす

herokuでsinatra動かした。 参考にした http://devcenter.heroku.com/articles/quickstart http://devcenter.heroku.com/articles/ruby http://www.machu.jp/diary/20111002.html#p01 サインアップ https://heroku.com でサインアップ、メールが来るのでconf…

mongoidで"db_name must be a string or symbol (TypeError)"

sinatra+mongoidで、 http://mongoid.org/docs/installation/configuration.html にあるようにmongoid.ymlを作って Mongoid.load!("path/to/your/mongoid.yml") で読み込ませて、modelをnewした時点で"db_name must be a string or symbol (TypeError)"が起…

http-post parameterをそのまま取る

post '/' do p env['rack.request.form_vars'] end postした値のname=shokai&location=hogeみたいなのをkey=valueにparseせずにそのまま取り出して使いたい時に便利 curl -d 'こういうのがそのまま渡せる' http://localhost:8080/

エラー

status 404 @mes = {:error => 'not found'}.to_json すぐ処理終わらせてレスポンス返したい時は throw(:halt, [404, {:error => 'not found'}.to_json]) よく忘れる

cookie

def cookie cookie = Hash.new env['HTTP_COOKIE'].split(';').each{|i| kv = i.split('=') cookie[URI.decode(kv[0].strip).to_sym] = URI.decode kv[1] } cookie end 取り出す cookie[:name]

Rack::Session::Cookieを使う

set :session, true の代わりに use Rack::Session::Cookie, :key => 'rack.session', :domain => 'shokai.org', :path => '/', :expire_after => 60*60*24*14, # 2 weeks :secret => 'kazusuke_ha_umaiyo' して、いままで通りsessionのhashに出し入れすれば…

Sinatra1.2.1とthin1.2.10を同時に使うと死ぬ

なんか問答無用でhttpアクセスした瞬間に落ちる (eval):2:in `method_missing': undefined method `associate_callback_target' for #<Thin::Connection:0x102753d40> (NoMethodError) from /Users/sho/.rvm/gems/ruby-1.8.7-p334/gems/eventmachine-0.12.10/lib/em/connection.rb:39:in `n</thin::connection:0x102753d40>…

sinatraに登録されたパスの一覧を取得する

なるべく短くてかっこいいURLでれすとふるにデータにアクセスできるようにしたいけど、既にアプリ内で登録されているパスとぶつかったら嫌じゃないですか。具体的にはlogoutとかhotentryみたいなユーザ名を作らせない、という処理を作りたい。 というわけで…

mongoid対応しているsinatra-authentication

git clone http://github.com/timmyc/sinatra-authentication cd sinatra-authentication rake build gem install pkg/sinatra-authentication-0.3.2.gemmongoid 2 betaだと動かないっぽい・・

envの中身

sinatraをサブディレクトリで動かしている時なんかに必要 http://localhost:4567/hello/world にアクセスしたときのenvをppした {"HTTP_ACCEPT"=> "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5", "HTTP_CA…

passengerでsinatraアプリをサブドメインで実行する

http://d.hatena.ne.jp/shokai/20100506/1273174669 と同じ様にpassengerセットアップして、config.ruも置く。symbolic linkははらない。 /etc/apache2/sites-available/default の末尾にでも <VirtualHost *:80> ServerName appname.shokai.org DocumentRoot /home/shokai/src</virtualhost>…

getやpost等をmethodとして呼び出す

methodsの中をpで見たら"GET /count"等があったので、callしてみたらふつうにwebブラウザでアクセスした時にうけとる文字列が返ってきた。erb等が使われている場合はerbを通した後の文字列(html)が返ってきた。 require 'rubygems' require 'sinatra' requ…

passengerでsinatraアプリをサブディレクトリで実行する

http://github.com/shokai/sensor-storage を http://shokai.mag.keio.ac.jp/sensor-storage/ で実行した。 以前passengerのインストールそのものはしたが、サブドメインでの実行方法しかわからなかったので使ってなかった。thinでpreforkさせてmod_proxy_ba…

sinatra開発時に自動リロードする

http://tobysoft.net/wiki/index.php?Ruby%2Fsinatra%2F%BC%AB%C6%B0%A5%EA%A5%ED%A1%BC%A5%C9%A4%B9%A4%EB%CA%FD%CB%A1 今までshotgunでやってたが、shotgunで起動すると別のホストからアクセスできなかったので sudo gem install sinatra-reloaderrequire …

sessionの読み書き

フムフム http://d.hatena.ne.jp/unageanu/20090517/1242531045 #!/usr/bin/env ruby require 'rubygems' require 'sinatra' set :sessions, true get '/' do session[:count] = 0 if !session[:count] "count : #{session[:count]+=1}" end リロードすると…

shotgunでコード自動リロードを有効にする

これまで普通に ruby sinatra-twitter-oauth.rb -s webrickでコードがリロードされてたのが、なくなってた sudo gem install shotgunshotgun sinatra-twitter-oauth.rb -p 4567 -s webrickshotgunからsinatra起動すれば自動リロードされるようになる