[from now] 2014/08/14 01:14:07

diff --git a/Sinatra Setup on MacOSX.md b/Sinatra Setup on MacOSX.md
new file mode 100644
index 0000000..3b2bf45
--- /dev/null
+++ b/Sinatra Setup on MacOSX.md
@@ -0,0 +1,118 @@
+sinatra setup on MacOSX
+========
+
+> LastModified: 2014-08-13
+
+[TOC]
+
+## Abstrat
+GitHub LectureのためにちょっとしたWebアプリを対象にしながらWorkFlowの理解を進めていきたい．
+ところでちょっとしたWebアプリってなんだろう？ってことでRuby製Webフレームワークの*Sinatra*を選択しました．
+Railsを100倍ぐらいシンプルにしたようなフレームワークです．
+
+## install HomeBrew
+何はともあれ，HomeBrewをインストール．
+
+```shell
+$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
+```
+
+### brew update & doctor
+念のため，HomwBrewが正しくインストールされたか確認．
+
+```shell
+$ brew update
+$ brew doctor
+```
+
+## install rbenv & ruby-build
+MacOSXに標準インストールされているRuby(Mavericksは2.0.0p451かな)とは違うバージョンを使いたくなった時のために，rbenvとruby-buildをインストールする．
+rbenvはディレクトリ(= 開発しているプロジェクト)ごとにRubyを簡単に切り替えられるツール．
+ruby-buildはrbenvのためにRubyをインストールしてくれるツール．
+
+```shell
+$ brew install rbenv
+$ brew install ruby-build
+```
+
+インストールが終わったら，.zprofile(zshの場合)に「rbenvのrootディレクトリは"/usr/local/var/rbenv"で，そのディレクトリが存在してたら起動毎にinitスクリプトを実行してー」って内容を追記する．(cf. https://github.com/shin-szk-engineering/dotfiles/blob/master/zprofile.mac)
+
+```shell
+# rbenv
+export RBENV_ROOT="/usr/local/var/rbenv"
+if [ -d $RBENV_ROOT ]; then
+  export PATH="$RBENV_ROOT/bin:$PATH"
+  if which rbenv > /dev/null; then eval "$(rbenv init - zsh)"; fi
+fi
+```
+
+2.0系以上のRubyが入っていればとりあえず問題ないので，せっかくrbenvをインストールしたけど，Mavericks標準のRubyのまま進めます．
+rbenvでの新しいrubyのインストール方法などは各自で．
+
+## setup gem
+GemはRubyパッケージを簡単にインストールするためのパッケージマネージャ．
+
+※ RubyのバージョンごとにGemが存在しているので，rbenvで複数バージョンのRubyを使い分ける場合はGemもそれぞれ別にパッケージをインストールするってことに注意． → 逆に言えば，他のバージョンのRubyで環境がぶっ壊れても他には影響を及ぼさないってこと．
+
+RubyやGemを使う上で頻繁に求められるパッケージを先にHomeBrewで入れておく．
+
+```shell
+$ brew install readline
+$ brew install apple-gcc42
+$ brew install sqlite
+$ brew install rbenv-gemset
+$ brew install rbenv-gem-rehash
+```
+
+GemはRubyを入れたら勝手に使えるようになってる．
+試しに，Gemのバージョンと何が入ってるか確認してみる．
+
+```shell
+$ gem -v
+$ gem list
+```
+
+### .gemrc
+いろいろインストールする前に~/.gemrcに1行書いておく．
+これでパッケージをインストールするときにドキュメント類を一緒にインストールしなくなるため，容量の節約と時間の短縮ができる．
+
+```shell
+gem: --no-ri --no-rdoc
+```
+
+### update gem
+いろいろインストールする前にGem自体をupdateする．
+
+```shell
+$ sudo gem update
+$ sudo gem install rubygems-update
+$ update_rubygems
+$ gem pristine --all
+```
+
+## install bundler
+gemの準備が整ったので，試しにbundlerをインストールしてみる．
+bundlerはRails3で標準になったgemをさらに便利にするツール．
+(cf. http://www.rubylife.jp/rails/ini/index2.html)
+
+```shell
+$ sudo gem install bundler
+```
+
+無事にインストールできたかな？
+
+# make a Web application with Sinatra
+
+```shell
+$ bundle install --path vendor/bundle --without production
+```
+
+# Run!
+
+```shell
+$ sudo gem install foreman
+```
+
+```shell
+$ foreman start
+```
\ No newline at end of file
diff --git a/sinatra/.gitignore b/sinatra/.gitignore
new file mode 100644
index 0000000..24933f1
--- /dev/null
+++ b/sinatra/.gitignore
@@ -0,0 +1,91 @@
+# Created by http://www.gitignore.io
+
+### Rails ###
+*.rbc
+capybara-*.html
+.rspec
+/log
+/tmp
+/db/*.sqlite3
+/public/system
+/coverage/
+/spec/tmp
+**.orig
+rerun.txt
+pickle-email-*.html
+
+# TODO Comment out these rules if you are OK with secrets being uploaded to the repo
+config/initializers/secret_token.rb
+config/secrets.yml
+
+## Environment normalisation:
+/.bundle
+/vendor/bundle
+
+# these should all be checked in to normalise the environment:
+# Gemfile.lock, .ruby-version, .ruby-gemset
+
+# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
+.rvmrc
+
+
+### Ruby ###
+*.gem
+*.rbc
+/.config
+/coverage/
+/InstalledFiles
+/pkg/
+/spec/reports/
+/test/tmp/
+/test/version_tmp/
+/tmp/
+
+## Specific to RubyMotion:
+.dat*
+.repl_history
+build/
+
+## Documentation cache and generated files:
+/.yardoc/
+/_yardoc/
+/doc/
+/rdoc/
+
+## Environment normalisation:
+/.bundle/
+/lib/bundler/man/
+
+# for a library or gem, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# Gemfile.lock
+# .ruby-version
+# .ruby-gemset
+
+# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
+.rvmrc
+
+
+### OSX ###
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear on external disk
+.Spotlight-V100
+.Trashes
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
diff --git a/sinatra/Gemfile b/sinatra/Gemfile
new file mode 100644
index 0000000..fa51af6
--- /dev/null
+++ b/sinatra/Gemfile
@@ -0,0 +1,18 @@
+# bundle install --path vendor/bundle --without production
+
+# Gemの取得先を指定する
+source "http://rubygems.org/"
+
+# Sinatra
+gem "sinatra"
+
+# Unicorn
+gem 'unicorn'
+
+# foreman
+gem 'foreman'
+
+# テストグループにRSpecを指定する
+group :test do
+  gem "rspec"
+end
diff --git a/sinatra/Gemfile.lock b/sinatra/Gemfile.lock
new file mode 100644
index 0000000..c66ce06
--- /dev/null
+++ b/sinatra/Gemfile.lock
@@ -0,0 +1,46 @@
+GEM
+  remote: http://rubygems.org/
+  specs:
+    diff-lcs (1.2.5)
+    dotenv (0.11.1)
+      dotenv-deployment (~> 0.0.2)
+    dotenv-deployment (0.0.2)
+    foreman (0.74.0)
+      dotenv (~> 0.11.1)
+      thor (~> 0.19.1)
+    kgio (2.9.2)
+    rack (1.5.2)
+    rack-protection (1.5.3)
+      rack
+    raindrops (0.13.0)
+    rspec (3.0.0)
+      rspec-core (~> 3.0.0)
+      rspec-expectations (~> 3.0.0)
+      rspec-mocks (~> 3.0.0)
+    rspec-core (3.0.3)
+      rspec-support (~> 3.0.0)
+    rspec-expectations (3.0.3)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.0.0)
+    rspec-mocks (3.0.3)
+      rspec-support (~> 3.0.0)
+    rspec-support (3.0.3)
+    sinatra (1.4.5)
+      rack (~> 1.4)
+      rack-protection (~> 1.4)
+      tilt (~> 1.3, >= 1.3.4)
+    thor (0.19.1)
+    tilt (1.4.1)
+    unicorn (4.8.3)
+      kgio (~> 2.6)
+      rack
+      raindrops (~> 0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  foreman
+  rspec
+  sinatra
+  unicorn
diff --git a/sinatra/Procfile b/sinatra/Procfile
new file mode 100644
index 0000000..9249f1e
--- /dev/null
+++ b/sinatra/Procfile
@@ -0,0 +1 @@
+web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
\ No newline at end of file
diff --git a/sinatra/config.ru b/sinatra/config.ru
new file mode 100644
index 0000000..bea9325
--- /dev/null
+++ b/sinatra/config.ru
@@ -0,0 +1,2 @@
+require './main.rb'
+run MainApp.new
\ No newline at end of file
diff --git a/sinatra/config/unicorn.rb b/sinatra/config/unicorn.rb
new file mode 100644
index 0000000..bcd48c1
--- /dev/null
+++ b/sinatra/config/unicorn.rb
@@ -0,0 +1,22 @@
+worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
+timeout 15
+preload_app true
+
+before_fork do |server, worker|
+  Signal.trap 'TERM' do
+    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
+    Process.kill 'QUIT', Process.pid
+  end
+
+  defined?(ActiveRecord::Base) and
+    ActiveRecord::Base.connection.disconnect!
+end
+
+after_fork do |server, worker|
+  Signal.trap 'TERM' do
+    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
+  end
+
+  defined?(ActiveRecord::Base) and
+    ActiveRecord::Base.establish_connection
+end
\ No newline at end of file
diff --git a/sinatra/main.rb b/sinatra/main.rb
new file mode 100644
index 0000000..c84cac3
--- /dev/null
+++ b/sinatra/main.rb
@@ -0,0 +1,12 @@
+# coding: utf-8
+
+require 'sinatra'
+require 'sinatra/base'
+require 'sinatra/reloader' if development?
+
+class MainApp < Sinatra::Base
+  get '/' do
+    @text = 'hello'
+    erb :index
+  end
+end
diff --git a/sinatra/views/index.erb b/sinatra/views/index.erb
new file mode 100644
index 0000000..72e7bab
--- /dev/null
+++ b/sinatra/views/index.erb
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title></title>
+</head>
+<body>
+  <%= @text %>
+</body>
+</html>
\ No newline at end of file