sinatraを使ってwebアプリ作成
かずー氏アイコンジェネレーター
http://kazooshi.moosan.org/
身内ネタ的なwebアプリをsinatraを使って開発したのでそのメモなど。
sinatraはrailsより圧倒的に簡単にwebアプリを作成できた。
何より圧倒的にrailsより楽だなと感じたのはデプロイ作業だった。
sinatraの基礎的な書き方とかはいろんな人が何かしら書いてると思うので、躓いたところとかだけをピックアップ。
- public/以下のファイルへのアクセス
viewからpublic/以下に置いたファイルへのアクセスどうするのかなーと思ったら
public/images/hoge.pngとかならば
<img src="images/hoge.png">
とかで普通にアクセスできた・・・。
- セッションの使い方
#app.rb #== sinatra session enable :sessions configure do use Rack::Session::Cookie, #:key => 'rack.session', #:domain => 'foo.com', #:path => '/', :expire_after => 3600, :secret => 'change' end
こんな感じで書いておくと
session[:hoge]が使用出来るので
session[:hoge] = "hoge"
という感じでやるとセッションに情報を入れられる。
rspecでテスト書いてていちいちコマンド打つのめんどくさい(というかコマンド忘れちゃう・・・)ので、Rakefileを書いてみたのだけれど、イマイチうまくうごかなくて結局どこかのブログにあったのを使わせてもらうと動いた
coding: utf-8 require "rspec/core/rake_task" desc "run spec" task :default => [:spec] RSpec::Core::RakeTask.new(:spec) do |spec| # - (Object) pattern # default: 'spec/**/*_spec.rb' # - (Object) rspec_opts=(opts) # default : nil spec.pattern = 'spec/*_spec.rb' spec.rspec_opts = %w(-c -fs) end
ruby1.9.2以降でrspec書く時の注意
ファイル構成
hoge.rb
spec/hoge_spec.rb
#hoge.rb class Hoge end
#spec/hoge_spec.rb require 'spec' require 'hoge' describe HogeTest end
で、
require 'hoge'で、Load errorがでる。
少し調べてみると、$LOAD_PATHにカレントディレクトリが含まれなくなってしまったお陰で、出来ないらしい。
そこで
#spec/hoge_spec.rb $LOAD_PATH << File.dirname(File.dirname(__FILE__)) require 'spec' require 'hoge' describe HogeTest end
で、$LOAD_PATH << File.dirname(File.dirname(__FILE__))を使って$LOAD_PATHに作業ディレクトリのパスを指定してやるとうまく動いた。
productionモードでrake db:migrate
うっかり忘れてたのでメモ
productionモードでDBをmigrateするには
rake db:migrate RAILS_ENV=production
productionモードで/public以下のフォルダを参照する
http://d.hatena.ne.jp/tarurut/20101203/1291336620
この記事から。
config/environments/production.rbにて
config.serve_static_assets = true
ほえー。
ただRailsアプリはアプリケーションサーバとして起動した方が よいので public 以下の各ファイルは別途静的サーバを立てて そこから提供した方がよい。
やっぱ静的データはすべて別からひっぱってくるもんなんですねえ。
rest_graphを使ってFacebookのfeedに投稿する
rest_graphがオワコンというのは置いといて・・・。
rest_graph.post('me/feed', :message => "メッセージ", :description => "概要", :link => "リンク先", :picture => "サムネイル画像" )
で、フィードに投稿できる。
rest_graphは事前に認証しておかないと走らないのでそれはまた別にプログラムを用意しておく必要あり。