2011年10月30日日曜日

(小ネタ)apacheのAddDefaultCharsetはOffにすべき

apacheのディレクティブにAddDefaultCharsetというのがあります。 

text/htmlやtext/plainの文字列エンコーディングを指定できるのですが、これが厄介です。

何故なら一般的なブラウザはHTML内のmetaタグでの文字列エンコーディングより、HTTPレスポンスヘッダーの文字列エンコーディングを優先するからです。 

一つのapacheで複数文字列エンコーディングを指定する場合には
  • metaタグを駆使する
  • こまめにディレクトリを分けてAddDefaultCharsetを使う
とか工夫が必要です。

2011年10月21日金曜日

githubで既にあるIssueにPull Requestをくっつける方法

概要

githubではPull Requestを送信する時に自動的にIssueも作成されます。 しかし「既にあるIssueにPull Requestをくっつける」という事がしたくなる場合があります。

説明

困ったときのStackoverflowによると、githubはWeb-APIが充実しておりそれを利用すると、実現できるようです。参考ページを参考にするとUnix上でcurlを利用してwebリクエストを送信すると簡単でした。
例
$ curl -k \
         -d "pull[base]=master" \
         -d "pull[head]=master" \
         -d "pull[issue]=1234" \
         -u "kennyj:xxxxx" \
         https://github.com/api/v2/json/pulls/rails/rails

-k SSL証明書の問題?を避ける
-d "pull[base]=master" 送信先のbranch名
-d "pull[head]=master" 送信元のbranch名
-d "pull[issue]=1234" バグ票番号
-u "kennyj:xxxxx" ユーザ名とパスワード
https://github.com/api/v2/json/pulls/rails/rails 送信先のユーザ名とリポジトリ名
無駄にIssueを増やさない為にも知ってて損はなさそうです。

参考

How do you attach a new pull request to an existing issue on github?

2011年10月6日木曜日

backbone.jsをrails3で実行できるようにするシェルスクリプト(rails3.1対応版)

何度も同じ事しているので貼っておきます(rails3.1対応版)。
capybara/capybara-webkit/headless対応や、capistrano、staging対応、sub uri対応等を追加しています。
./gen.sh アプリ名
で利用できます(ノーエラーハンドリング上等!)

$ cat gen.sh

2011年10月4日火曜日

rails3.1 with rspec-request , capybaraでcookieを取り扱うには

rails3.1とrspec-requestsをcapybaraで利用した際に、cookieの扱い方が分からなかったのでメモしておきます。
# app/controllers/foo_controller.rb
class FooController < ApplicationController
  def index
    puts cookies["key1"]
    cookies["key1"] = '2'
    cookies.permanent["key2"] = "3"
  end
end

# spec/requests/foo_spec.rb
describe "foo周辺の仕様" do
  def cookies
    Capybara.current_session.driver.browser.current_session.instance_variable_get(:@rack_mock_session).cookie_jar
  end

  it "foo/index" do
    cookies["key1"] = '1'
    visit "/foo/index"
    cookies["key1"].should == '2'
    cookies["key2"].should == '3'
  end
end
上記の検証の過程で、
  • cookiesのキー名は文字列でないといけない(シンボルだと上手くいかない)
  • cookiesメソッドを上書く必要があり
  • permanentでも同じように読める("key2")
という事が判明しました。

ちなみに各プロダクトは下記の組み合わせで確認しました。
rails-3.1.0
rspec-2.6.0
rspec-rails-2.6.1
capybara-1.0.1