Monthly Archives: September 2010

devise で Basic 認証をする

devise は高機能な Rack ベースの認証システムだそうです。
plataformatec’s devise at master – GitHub

よくあるログイン画面を表示して認証する方式もありますし(これはなんというのだろう?)、いろいろな認証方式を使用することができるようです。

今回、お試しサイトを作る必要があって Basic 認証を使用することにしました。
その方法をググってもいまいちわからなかったので、ここに記載しておくことにします。
しかしながらこれで使い方があっているのかどうか、いまいち自身がないので間違っている場合には、ご指摘をお願いします。

devise では通常以下のようなコードで認証を必須にできます。

class ArticlesController < ApplicationController
  before_filter :authenticate_user!
end

以下のページによると HTTP を使用した認証にはこんな風に書いてあります。
How to: use http authentication – devise – GitHub

def http_authenticate
  authenticate_or_request_with_http_digest do |user_name, password|
    user_name == "foo" && password == "bar"
  end
  warden.custom_failure! if performed?
end

今回はパスワードは固定ではないので、えいやとこれだけにしてみました。

class ArticlesController < ApplicationController
  before_filter :authenticate_user!

  def http_authenticate
  end
end

思った通りに Basic 認証で認証することができるようになりました。

Capistrano with Bundler and RVM

最近、新しい Rails サーバを立ち上げる必要が出てきて、一から Capistrano によって deploy をする必要に迫られました。

Capistrano についてはいろいろなところで良質な記事があるので、それ自体を使うのは難しくはないと思うのですが、 RVM や Bundler を使用した環境で使用する場合に結構はまってしまったので、記録しておこうと思います。

サーバ側で RVM を使用する場合

RVM: Ruby Version Manager – RVM with Crapistrano を参照し、Ruby 1.9.2 を使うのであれば、以下の3行を deploy.rb に書き加えます。

$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require "rvm/capistrano"
set :rvm_ruby_string, '1.9.2'
set :rvm_type, :user

deploy 時に Bundler で Gem を更新する場合

deploy 時に bundle install で Gem をインストールしてほしいと思います。

大前提として、 Bundler を最新版にしておくことが重要です。
自分の場合、古いバージョンが入っていて上手く動きませんでした。

config/deploy.rb に

require "bundler/capistrano"

と書いておけば、 deploy 時に標準では shared/bundle フォルダに bundle install をしてくれます。