Padrino
SinatraベースのWebフレームワーク。RailsっぽくSinatraを使える。
Sinatraはシンプルで自由度が高いけど、機能が少なすぎる。
Railsは機能が過剰でお手軽感に欠ける。
Padrinoは機能の量とお手軽感、自由度がちょうど良い。
ドキュメント
Logging, Reload, Auto Load, Webサーバなど
content_for, form, tagなど
Routing, Layouts, Filters, Rendering
Sinatra関連
set: enable: disable:
インストール
一応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 になる。
例:(jQuery、Backbone.js、Underscore.js、json2を使用)
#= 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