Padrino

http://padrinorb.com/

SinatraベースのWebフレームワーク。RailsっぽくSinatraを使える。

Sinatraはシンプルで自由度が高いけど、機能が少なすぎる。

Railsは機能が過剰でお手軽感に欠ける。

Padrinoは機能の量とお手軽感、自由度がちょうど良い。

ドキュメント

インストール

一応RVM使っておく。

$ rvm install 1.9.2

$ rvm 1.9.2

$ rvm gemset create padrino

$ rvm 1.9.2@padrino

$ gem install padrino

プロジェクト作成

$ padrino g project my_project

$ cd my_project

$ echo "rvm 1.9.2@padrino" > .rvmrc

Haml, scss, ActiveRecord, RSpec という構成 (Generators

$ padrino g project my_project -e haml -c scss -d activerecord -t rspec

ライブラリはBundlerで。

$ gem install bundler

$ bundle install

サーバ起動・終了

$ padrino start

$ padrino start -d -p 3000 -e development -a thin

$ padrino stop

thinを使う場合はGemfileに gem 'thin' を追加しておく。

Controller生成

$ padrino g controller User get:index

Model生成

$ padrino g model User name:string age:integer email:string

Assets PipelineでCoffeeScriptを使う

http://tedkulp.com/2011/11/25/padrino-and-the-asset-pipeline/

以下をGemfileに追加してbundle install。

gem 'padrino-sprockets', :require => 'padrino/sprockets'

gem 'coffee-script'

gem 'therubyracer', :require => 'v8'

public/ 以下を app/assets/ に移動(ただしfaviconはpublicに戻す)

$ mkdir -p app/assets

$ mv public/* app/assets/

$ mv app/assets/favicon.ico public/

jsとcssをそれぞれ適当に変更。

app/assets/javascripts/application.js

//= require ./libs/jquery

//= require ./libs/jquery-ujs

//= require_tree .

app/assets/stylesheets/application.css

/*

*= require_self

*= require_tree .

*/

app/app.rbのconfigブロックに以下を追加

# Sprockets support

require 'sprockets'

register Padrino::Sprockets

sprockets

View(layoutとか)でjsとcssを指定

%link(rel="stylesheet" type="text/css" href="/assets/application.css")

%script(type="text/javascript" src="/assets/application.js"

CoffeeScriptのファイル名は app/assets/javascripts/hoge.js.coffee のようにする。

するとWebでは /assets/hoge.js になる。

例:(jQueryBackbone.jsUnderscore.jsjson2を使用)

#= require ./libs/jquery-min.js

#= require ./libs/underscore-min.js

#= require ./libs/backbone-min.js

#= require ./libs/json2.js

#= require ./models/hoge.js

window.application ||= {}

class Router extends Backbone.Router

routes:

'': 'index'

〜〜〜

class application.MyClass ## 他のスクリプトからこのクラスを使いたい場合

constructor: (@name) ->

〜〜〜

JavaScriptライブラリをwget

Padrinoとは直接関係ないけど。

$ mkdir -p app/assets/javascripts/libs

$ cd app/assets/javascripts/libs

jQuery

$ wget http://code.jquery.com/jquery-1.7.min.js -O jquery-min.js

Backbone.js

$ wget http://documentcloud.github.com/backbone/backbone-min.js

Underscore.js

$ wget http://documentcloud.github.com/underscore/underscore-min.js

json2.js

$ wget https://raw.github.com/douglascrockford/JSON-js/master/json2.js