ページ

ラベル Sinatra の投稿を表示しています。 すべての投稿を表示
ラベル Sinatra の投稿を表示しています。 すべての投稿を表示

2012年7月16日月曜日

Sinatraの自動リロード

2012/7/16 10:00 指摘によりsinatra-contribを使う旨を追記&修正

未だにshotgun使ってた。

参考:
モノクロームの中: sinatra (2) - オートリロード -
Sinatra::Reloader (part of Sinatra::Contrib)

gemをインストール
% gem install sinatra-contrib

Classicスタイル
require "sinatra"
require "sinatra/reloader" if development?

Modularスタイル
require "sinatra/base"
require "sinatra/reloader"

class MyApp < Sinatra::Base
  configure :development do
    register Sinatra::Reloader
  end
end
developmentモードで起動したときに有効になる。(デフォルトでdevelopmentモード)

ところでrackup -E で設定できるのってdevelopmentとtestとproductionだけで合ってるんだろうか。ハッキリとこれです!って言ってるのが見つけられなかった。


あと、Bundler使うパターン

Gemfileがこう
source :rubygems

gem 'sinatra', require: 'sinatra/base'

group :development do
  gem 'sinatra-contrib', require: 'sinatra/reloader'
end
で、本体のほうがこう
class App < Sinatra::Base
  configure :development do
    Bundler.require :development
    register Sinatra::Reloader
  end
end
bundle exec rackupで起動しよう。

ファイル単位でもリロードの設定を変えられるようだ。
http://www.sinatrarb.com/contrib/reloader


今回の、shokaiさんはいつからやっていた?は2年と3ヶ月前でした。
sinatra開発時に自動リロードする - 橋本詳解

2012年5月22日火曜日

Padrinoでこんにちはしてみた

http://jp.padrinorb.com/

インストール
% gem install padrino

プロジェクトの生成
% padrino g project padrino-test

gはgenerateのg。genとかgenerateでも良い。

projectのところに生成するものを指定。
生成できるのは project, app, mailer, controller, model, migration, plugin, admin, admin_page。

padrino-testはプロジェクト名。適当。

デフォルトだとこんなんが生成される。
.
├── Gemfile
├── app
│   ├── app.rb
│   ├── controllers
│   ├── helpers
│   └── views
│   └── layouts
├── config
│   ├── apps.rb
│   └── boot.rb
├── config.ru
├── public
│   ├── favicon.ico
│   ├── images
│   ├── javascripts
│   └── stylesheets
└── tmp

ちなみに --tiny オプションをつけて生成するとcontroller、helper、mailerフォルダーがrbファイルと化す。
.
├── Gemfile
├── app
│   ├── app.rb
│   ├── controllers.rb
│   ├── helpers.rb
│   └── mailers.rb
├── config
│   ├── apps.rb
│   └── boot.rb
├── config.ru
├── public
│   ├── favicon.ico
│   ├── images
│   ├── javascripts
│   └── stylesheets
└── tmp

生成のときにはコンポーネントを色々選べる。僕の趣味で選ぶとこんな感じかしら。
% padrino g project padrino-slim -d mongoid -t rspec -s jquery -e slim -c sass -m mocha -b
-b つけるとbundle installまでやってくれる(自分でやらなくても、最初にアプリケーション起動するときに勝手にbundle installしてくれるらしい。最初って初回って意味だろうか)。

もっと適当な感じのときは
% padrino g project feeling --tiny -e slim -c sass -b
とかか。Slimは外せない。


jqueryとprototype.js両方使いたいときとかあるんじゃないか?と思って
% padrino g project -s prototype -s jquery
とかやってみたら後に指定したほうになるみたいだった。cucumberとrspec両方使う人とかいると思うけどね?
(と思ってこっちもやってみたら、cucumber指定したらデフォでrspecの分も生成されてる?)

ともあれ、生成したら動かしてみる。
ルートディレクトリに入って
% padrino s

http://0.0.0.0:3000 で動き出す。
ログもカラフルに吐き出される。

http://0.0.0.0:3000 にアクセスしてみると404の画面になる。

app/app.rbを編集
get '/' do
  "something"
end
とか適当に書く。

shotgunとか使わなくても自動リロードされてるようだ。

なぜかここまで書くのに3日ぐらいを費やしてしまったので(padrino自体をいじったのは10分ぐらいなのに)、とりあえず一区切り。

2011年9月2日金曜日

SinatraとSlimでInternal Server Errorが出てた

さくらのVPSでrvmとrubyをアップデートしたら各所に弊害が出てた。

Passengerがエラー吐いてたので /etc/apache2/conf.d/passenger を修正。
LoadModule passenger_module /home/zakuni/.rvm/gems/ruby-1.9.2-p290@global/gems/passenger-3.0.8/ext/apache2/mod_passenger.so
PassengerRoot /home/zakuni/.rvm/gems/ruby-1.9.2-p290@global/gems/passenger-3.0.8
PassengerRuby /home/zakuni/.rvm/wrappers/ruby-1.9.2-p290@global/ruby
rubyのバージョンに依存しない書き方にしたいところだけど、とりあえずこれで保留。

apacheをリロード
sudo /etc/init.d/apache2 reload

そして輝くInternal Server Error。

悩む。

どうやらSlimがおかしいと突き止める。

Slimの公式サイト(http://slim-lang.com/)と見比べる。

1行目
! doctype html
になってたのを
doctype html
に変えてやる。

エラー消えた。

いつの間にかSlimの仕様が変わってたらしい。

2011年7月24日日曜日

[Ubuntu][Apache2]PassengerでSinatraをサブディレクトリで動かす

Passengerで普通に動かすときと同じようにSinatraアプリを用意する。

app2/
├ config.ru
├ app.rb
├ public/
└ tmp/

http://ほげほげ.com/app2

で動かしたいとしたら
/etc/apache2/conf.d/passenger
を編集して(ファイル名はなんでもいい)
RackBaseURI /app2
を追加してやり、DocumentRootにapp2ディレクトリ下にあるpublicディレクトリのシンボリックリンクを作成する。

app2の置き場所が/home/user/app2であり、DocumentRootが/var/www/app/publicならば
sudo ln -s /home/user/app2/public /var/www/app/public/app2
/home/user/app2/public/へのシンボリックリンクを、/var/www/app/public/に、app2という名前で貼ってる。

そしてapache再起動
sudo /etc/init.d/apache2 restart

参考:
passengerでsinatraアプリをサブディレクトリで実行する - 橋本詳解
Passenger を使ってサブドメインではなく Rails と Sinatra を共存させる - oooooooo
passenger+sinatraで同一ドメイン内に複数のsinatraアプリを動かす方法 - Dive in Blue

[Ubuntu][Apache2]PassengerでSinatraを動かす

前にも書いたけど、整理的な意味も含めて。


Sinatraアプリの構成は以下の通り。
app/
├ config.ru
├ app.rb
├ public/
└ tmp/

publicもtmpも、中身は入ってなくてよい。

config.ruはこんな風に。
require 'rubygems'
require 'sinatra'
require './app.rb'

run Sinatra::Application

publicディレクトリをDocumentRootに指定してやる。

DocumentRootを指定するには
/etc/apache2/sites-available/default
の中身を編集する。

appディレクトリを/var/www/に置いている場合だったら
DocumentRoot /var/www/app/public
って書いてやればいい。

sudo /etc/init.d/apache2 reload
で、apacheをリロードすればもう動いてるはず。

アプリを再起動するには、tmpディレクトリにrestart.txtをアップロードすればいいそうな。

参考:
passengerでsinatraアプリをサブディレクトリで実行する - 橋本詳解
どうのこうの » さくらのVPSでsinatraを動かすまでのメモ

2011年2月28日月曜日

Sinatraで画像ファイルを扱う

画像ファイルやcssファイル等、静的ファイルはpublicフォルダに入れておけばいい。

そのファイルを指定するときは、public/hoge.png、ではなく /hoge.png で指定できる。

2011年2月27日日曜日

【Ubuntu】さくらのVPSでSinatraを動かす

Ubuntuにしてrvmが入ってなかったので入れる。

参考:さくらのVPSにRVM、Rubyをインストール


sinatraをインストール
% gem install sinatra

そして以下を参考に

さくらのVPSでsinatraを動かすまでのメモ


さくらのVPSでゼロからubuntuとrailsでなんか動かす 6 apache + passenger


% gem install passenger
% passenger-install-apache2-module

したら、何か色々インストールしろという指示が出たのでaptitude installしてもっかいやってみたけどインストールしろしろと言ってくる。

よくみたらNot Foundになってるものがあってインストールできてなかった。

aptitude updateしてから再度aptitude installしたらできた。

sudo emacs /etc/apache2/conf.d/passenger
して以下を追加
LoadModule passenger_module /home/ユーザ/.rvm/gems/ruby-1.8.7-p334/gems/passenger-3.0.3/ext/apache2/mod_passenger.so
PassengerRoot /home/ユーザ/.rvm/gems/ruby-1.8.7-p334/gems/passenger-3.0.3
PassengerRuby /home/ユーザ/.rvm/wrappers/ruby-1.8.7-p334/ruby

ファイル名はpassengerじゃなくてもいい。なんでもいいらしい。

Sinatraアプリケーションのフォルダ、例えばsinatrappって名前のフォルダの中に、config.ru、myapp.rb、publicフォルダ、tmpフォルダを作成する。

config.ruの中身は適当にこんな感じ
require 'myapp'

run Sinatra::Application

myapp.rb
require 'rubygems'
require 'sinatra'

get '/' do
'Hello, world.'
end


さっきの /etc/apache2/conf.d/passenger に
RackBaseURI /sinatrapp
って加える。

そしてDocument Rootにシンボリックリンクを貼る。
% sudo ln -s /home/ユーザ/sinatrapp/public /var/www/sinatrapp

apacheを再起動するともう動いてる。
% sudo /etc/init.d/apache2 restart

相変わらずshokaiさんのブログも激しく役に立った。
[Ubuntu][MAG][Passenger][Sinatra][Apache2]passengerでsinatraアプリをサブディレクトリで実行する

2010年12月4日土曜日

SinatraでSlimを使う

前々回前回ときて、今度はSlimをSinatraで使う。

まずインストール
gem install slim

SinatraにSlimが搭載されるのは次のリリースかららしいので、以下が必要。

require 'slim'

module Sinatra
  module Templates
    def slim(template, options={}, locals={})
      render :slim, template, options, locals
    end
  end
end

で、中身。

helloslim.rb

views/layout.slim

views/index.slim

views/hello.slim

sassも使えるらしい。

SinatraでHamlを別ファイルに書く

前回書いたhello_haml.rbのビュー部分を別ファイルに書く。

本体となるhello.rbと、viewsフォルダに分ける。

viewsフォルダの中には
 layout.haml
 index.haml
 hello.haml

それぞれ以下のように書いてやればいい。

hello.rb

views/layout.haml

views/index.haml

views/hello.haml


前回のhello_haml.rbを含む全体をまとめたものとをgithubに上げておいた。
https://github.com/zakuni/hellohaml

Sinatra,erbのHello WorldをHamlを使って書き直す

Slimというよさげなものが出てきて、是非とも流行ってほしいところですが、Sinatraに搭載されるのは次のリリースかららしいですし、僕はまずHamlをSinatraで使うのも覚束ないので、練習がてらに、

ここ↓に載ってるSinatraとerbを使ってのHello Worldのerb部分をHamlで書き直してみた。
http://gihyo.jp/dev/serial/01/ruby/0009?page=2

これが元のコード


そしてこれがHamlを使って書き直したもの。

「template :layout」には、htmlタグとかみたいな、各ページに共通する、まさにテンプレ部分を書くらしい。
ページによって無効にしたいときは、「haml :layout => false」してやればいいようだ。
ちなみに各タグに¥nとかの改行コードをつけてやれば、erbみたいに1行で書くこともできるけど、やってみたら気持ち悪い&見辛かった、のでこういう風にした。

インデントは全体的にちょっと気持ち悪いけど、Hamlはインデントに意味を持たせてるから下手にいじるとエラーが出ちゃう。
SinatraでHamlを使うときは、きちんと別ファイルを作ってやるとかしたほうがよさげなのかな。

追記:
別ファイルに作ってやった
http://zakuni.blogspot.com/2010/12/sinatrahaml.html