Sinatra
Sinatra: README (Japanese)¶
-
昨今の自分用Webアプリケーションひな形 - naoyaのはてなダイアリー
bower & sinatra & slim + sass + coffee -
Sinatra Pattern 20130415
ちっちゃくはじめておっきく育てるSinatraアプリの作り方 -
[sinatra ですぐにアプリケーションの実装に入れるようにするための準備 - Studio3104::BLOG.new] (http://studio3104.hatenablog.com/entry/2014/11/04/012457)
Sinatra + slim + sass + coffee + bower + grunt + foreman
Reference¶
- Ruby - Sinatraの使い方あれこれ - Qiita
- 異なるルートで同じ対応をしたい
- RESTリクエストのパラメータを受け取りたい
- 正規表現を用いたルート
- 別のルートへリダイレクトする
- 静的なファイルを見せる
- Erbファイルを見せる
- Erbファイルに変数を渡す
- 事前・事後に処理したいことがあるとき
- 404 Not Foundのカスタマイズ
- 500 Internal Server Errorのカスタマイズ
- Session管理
- Cookieの利用
- ファイル添付
- チュートリアル - sinatraへ簡易アカウント管理機能を追加する - Qiita
- Sinatra+ActiveRecord+SQLite3で,軽量なWeb-DB連携例 | tamo's blog
Rack¶
- そうだRack作ろう。
Rackとは何か、Rackアプリ/ミドルウェア - Rack::Session::Cookieを使う - 橋本詳解
Heroku¶
Getting Started¶
Install¶
set http_proxy=http://localhost:8080 gem install sinatra gem install sinatra-contrib
myapp.rb¶
require 'sinatra' require 'sinatra/reloader' get '/' do 'Hello world!' end
ruby myapp.rb
静的ファイル¶
- Sinatra: README (Japanese) #静的ファイル
app ├─public │ ├─css │ ├─fonts │ ├─img │ └─js
ビュー / テンプレート¶
-
app └─views │ index.erb │ layout.erb │ └─subdir index.erb
-
Sinatraが使いやすいので勝手に宣伝してみる - 射撃しつつ前転
ディレクトリ階層を作りたい場合はget '/subdir' do erb :"subdir/index" end
ConfigFile¶
config.yml
greeting: Welcome
require "sinatra" require "sinatra/config_file" config_file 'path/to/config.yml' get '/' do @greeting = settings.greeting haml :index end
Haml¶
HTML2Haml | Convert HTML Snippets to Haml¶
5分で分かるHaml¶
/ HTMLのコメント -# hamlのコメント
Sinatra を使って Haml で作成したテンプレートに変数を埋め込む - 酔いどれコード¶
- タグの後に = を付けない場合
- 変数名をそのまま記述しても変数として認識されない
- 変数名を #{ } で囲むと変数として認識される
- タグ名以降は "" で囲まれた文字列と同じ扱い?
- タグの後に = を付ける場合
- リテラルは必ず " や ' で囲む必要がある
- カンマ区切りにしてもOK
- = 以降はすべて変数として認識されている?受け取る方は可変引数に対応しているからカンマ区切りでもOKと(調べてない)。
- 要素の指定は内容よりも前に書く
-
- を付けると Ruby のコードを埋め込むことができる
views/layout.haml¶
%html %head %title sinatra %body = yield
ページごとにタイトルを変える¶
app.rb
require "sinatra/content_for"
layout.haml
%html %head %title = yield_content(:title)
somepage.haml
- content_for :title do "This is title" end
- content_for :title do = "This is title"
Slim¶
- Slim - A Fast, Lightweight Template Engine for Ruby
- 速習テンプレートSlim(HTML作成編) - Qiita
- HTML2slim
- slim2HTML
ActiveRecord¶
認証¶
- チュートリアル - sinatraへ簡易アカウント管理機能を追加する - Qiita
ログインの実装サンプル。ユーザ認証はメルアドとパスワード。
Unicorn¶
Unicornの停止¶
$ kill -QUIT `cat unicorn.pid`
$ ps -ef | grep unicorn | grep -v grep hoge 7299 1 0 22:13 ? 00:00:04 unicorn master -c unicorn.conf -D hoge 7303 7299 0 22:13 ? 00:00:03 unicorn worker[0] -c unicorn.conf -D hoge 7306 7299 0 22:13 ? 00:00:03 unicorn worker[1] -c unicorn.conf -D $ kill -QUIT 7299
TIPS¶
- SinatraでJSONを返す
- Sinatraのハンドラ内でem-http-requestを使う - daily gimite
- Fiberを使ってem-http-requestとかを同期的に呼び出す - daily gimite
-
Sinatraがデフォルトでは外部から繋がらなくなってたよ - Qiita
- 実行オプションを使う
$ bundle exec ruby hoge.rb -e production
- rubyのコードの中で設定する
set :environment, :production
- 実行オプションを使う
Singleton¶
- ruby - best/most elegant way to share objects between a stack of rack mounted apps/middlewares? - Stack Overflow
class SharedObject include Singleton def test @test ||= "hello world" end end class App1 < Sinatra::Base get '/' do SharedObject.instance.test end end
- Ruby Singleton attr_accessor - Stack Overflow
class Foo singleton_class.class_eval{attr_accessor :bar} end