Hatena::ブログ(Diary)

ursmの日記

2009-06-27

Sinatra勉強会@万葉

SinatraHaml と Sass を使うためのライブラリだと認識している私ですが、お邪魔してきました。

本編

懇親会

  • Kinesis と SlimBlade Trackball の営業をしてきた
  • PHP の怖い話をたくさん聞いた。なるべく近寄らないようにしよう

Rails 勉強会ともまた違う磊落さが素敵でした。主催の id:tsuyoshikawa さん、お話いただいた jugyo さん、ありがとうございました。

2009-06-20

Sinatra + Ruby 1.9.1 で "invalid byte sequence in US-ASCII" が出る件

Sinatra はビューを read する時のエンコーディングを指定していない (アプリケーション側から渡すこともできない) ため、このような問題が発生します。config.ru あたりに Encoding.default_external = 'UTF-8' と書くのがいいんじゃないでしょうか。

環境変数 LANG の値によって挙動が変わるので、開発環境では問題がないのに本番環境だとエラーが出たりしてちょっと厄介です。

参考
Rubyist Magazine - Ruby M17N の設計と実装

rack_hoptoad

HoptoadRails アプリケーションのエラーを通知してくれるサービスです。機能としては exception_notification と同じようなものですが、

  • 管理画面からエラーの一覧と詳細を見れる
  • 似たようなエラーはまとめてくれる (=メールがわんさか来たりしない)
  • エラーごとに resolved / unresolved を管理できる
  • メールの設定をしなくていい

というような特徴があります。1プロジェクトまでは無料。画面はこんな感じ → 一覧 / 詳細

で、その Hoptoad を Rack アプリケーションから使えるようにする Rack middleware があります。その名も rack_hoptoad。これを使えば Sinatra アプリケーションのエラーも Hoptoad で通知できます。

導入方法はとても簡単なので README 見てください。token みたいなのは Hoptoad のアカウント作ると発行されるやつです。

2009-03-04

Sinatra で Sass の @import ディレクティブが動かない件

Sinatra は組み込みの sass メソッドで Sass を render できるのですが、@import ディレクティブを使うと「そんなファイルねーよ」と怒られてしまいます。

これはアプリケーションのルートディレクトリを起点にしてファイルを探しているのが原因なので、:load_paths を指定してやると良いです。

require 'rubygems'
require 'sinatra'

get '/*.css' do |path|
  content_type 'text/css'
  sass path.to_sym, :sass => {:load_paths => [options.views]}
end

view のパスは options.views で取得できます (変えていなければ #{APP_ROOT}/views)。

参考
301 Moved Permanently

2009-03-02

Ruby 1.9.1 で Passenger 2.1.1 beta を試す

Phusion Passenger 2.1.1 (beta) released, thanks sponsors! - Phusion Blog

Passenger 2.1.1 beta が Ruby 1.9.1 に対応したらしいので試してみました。Rails じゃなくて Sinatra です。

Passenger 2.1.1 beta

普通にインストールすると fastthread のビルドに失敗します。公式のアナウンスでは fastthread にパッチを当てる方法が紹介されていますが、1.9 だと fastthread は意味がない (と思う) ので --ignore-dependencies で入れてしまいます。

$ wget http://phusion-passenger.googlecode.com/files/passenger-2.1.1.gem
$ sudo gem19 install passenger-2.1.1.gem --ignore-dependencies
$ sudo gem19 install rake
$ sudo passenger-install-apache2-module

Sinatra 0.9.1

Sinatra の安定版リリース (0.9.0.4) は Ruby 1.9.1 に対応していないので、開発版を使います。

Ruby 1.9.1 に対応した Sinatra 0.9.1 がリリースされました。

$ sudo gem19 install sinatra

アプリケーションの配置

haml.ursm.jp を適当な場所に配置します。ついでに Haml をインストールします。

$ hg clone http://bitbucket.org/ursm/hamlursmjp/ haml.ursm.jp
$ sudo gem19 install haml

Apache の設定

LoadModule passenger_module /usr/lib64/ruby19/gems/1.9.1/gems/passenger-2.1.1/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib64/ruby19/gems/1.9.1/gems/passenger-2.1.1
PassengerRuby /usr/bin/ruby19

<VirtualHost *:80>
  ServerName haml.ursm.jp
  DocumentRoot /path/to/haml.ursm.jp/public

  <Directory /path/to/haml.ursm.jp/public>
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

これでどうやら動いているようです。

2008-08-12

Sinatra を CGI スクリプトとして実行する

env を development 以外にしておかないと reload! が無限ループして死ぬ。

#!/usr/bin/env ruby
require 'rubygems'
require 'sinatra'

get '/' do
  'hogefuga'
end

set_options :run => false, :env => :cgi
Rack::Handler::CGI.run Sinatra.application

Helper in Sinatra

ないのかと思っていたらありました。

require 'rubygems'
require 'sinatra'

helpers do
  def hoge
    'hoge'
  end
end

get '/' do
  @fuga = 'fuga'

  erb <<-ERB
<%= hoge %>
<%= @fuga %>
  ERB
end