Hello, Sinatra! (1)

2012-10-08#sinatra

いまさらSinatraを始めてみた。

モチベ

versions

sinatra install

# Gemfile

source :rubygems

gem 'sinatra'
$ bundle install --path vendor/bundle --binstubs
# app.rb

require 'bundler'
Bundler.require

get '/' do
  'Hello, Sinatra!'
end
$ ruby -rubygems app.rb

rabl

# Gemfile

source :rubygems

gem 'sinatra'
gem 'rabl'
$ bundle
# app.rb

require 'bundler'
Bundler.require

Rabl.register!

get '/' do
  render :rabl, :home, :format => :json
end
# views/home.rabl

node(:greeting) do
  'Hello, Sinatra with rabl!'
end

config.ru

# config.ru

require 'bundler'
Bundler.require

require './app'
run App
# app.rb

require 'sinatra/base'

class App < Sinatra::Base
  Rabl.register!

  get '/' do
    render :rabl, :home, :format => :json
  end
end

pow

# Gemfile

group :development do
  gem 'powder'
  gem 'guard-pow'
end
$ bundle
$ powder link
$ guard pow init
# Guardfile

guard 'pow' do
  watch('Gemfile')
  watch('Gemfile.lock')
  watch('app.rb')
  watch('config.ru')
end

heroku & thin

# Gemfile

group :production do
  gem 'thin'
end

group :development do
  gem 'heroku'
  gem 'powder'
end
# Procfile

web: thin start -p $PORT -e $RACK_ENV

activerecord

# Gemfile

gem 'sinatra-activerecord'
gem 'rake'

group :production do
  gem 'pg'
end

group :development, :test do
  gem 'sqlite3'
end
$ bundle
# Rakefile

require 'bundler'
Bundler.require

require 'sinatra/activerecord/rake'
require './app'
require './config/environment'
$ rake -T
rake db:create_migration
rake db:migrate
rake db:rollback
# config/environment.rb

require 'uri'

configure :development do
  set :database, 'sqlite:///db/development.db'
end

configure :test do
  set :database, 'sqlite:///db/test.db'
end

configure :production do
  db = URI.parse(ENV['DATABASE_URL'] || 'postgres://localhost/mydb')

  ActiveRecord::Base.establish_connection(
    :adapter => db.scheme == 'postgres' ? 'postgresql' : db.scheme,
    :host => db.host,
    :port => db.port,
    :username => db.user,
    :password => db.password,
    :databasee => db.path[1..-1],
    :encoding => 'utf8'
  )
end
$ rake db:create_migration
$ rake db:migrate
$ rake db:migrate RACK_ENV=test
$ git push heroku master
$ heroku run rake db:migrate
Running `rake --trace db:migrate RACK_ENV=production` attached to terminal... up, run.1
** Invoke db:migrate (first_time)
** Execute db:migrate
rake aborted!
could not connect to server: Connection refused
        Is the server running on host "localhost" and accepting
        TCP/IP connections on port 5432?

連休やったのはここまで。 時間があれば(2)もやる予定。