moosan63の日記、技術メモ

日記とか、技術メモとか

sinatraを使ってwebアプリ作成

かずー氏アイコンジェネレーター
http://kazooshi.moosan.org/
身内ネタ的なwebアプリをsinatraを使って開発したのでそのメモなど。

sinatrarailsより圧倒的に簡単に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に作業ディレクトリのパスを指定してやるとうまく動いた。

gitのメモ

今日はアルバイト先の社内勉強会でgitについて発表があったのでメモしてみる。
なんとなくわかってたことが明確になった。

addする前の状態はworking directory
addするとstaging
commitするとrepository
pushするとremote repository

になる。

git reset --hard HEAD-1
のようにするとコミットをヘッドからさかのぼれる。
これ知らなかった。すんごい。


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は事前に認証しておかないと走らないのでそれはまた別にプログラムを用意しておく必要あり。