Hatena::ブログ(Diary)

Run on Rails このページをアンテナに追加 RSSフィード

2008-06-20

Ruby OpenID Libraryに付属しているRP、OPのサンプルを動かしてみる

特集:いますぐ使えるOpenID|gihyo.jp … 技術評論社

いますぐ使えるOpenID:第2回 OpenIDライブラリに付属しているRPサーバを動かしてみる|gihyo.jp … 技術評論社

を参考に、Ruby OpenID Libraryに付属するRPのサンプルを動かしてみた。

環境

Ruby OpenID Libraryのインストール

RubyGemsを使ってインストールする。

$ su -
# gem install ruby-openid
Successfully installed ruby-openid-2.0.4
1 gem installed
Installing ri documentation for ruby-openid-2.0.4...
Installing RDoc documentation for ruby-openid-2.0.4...
# exit

インストールされたことを確認。

$ gem list | grep openid
ruby-openid (2.0.4)

インストールの${RUBYLIB}は環境によってことなるが、${RUBYLIB}/gems/1.8/gems/ruby-openid-2.0.4/

は僕の環境では下記となった。

/usr/lib/ruby/gems/1.8/gems/ruby-openid-2.0.4/

サンプルrails_openidの実行準備

サンプルのrails_openidをホームにコピーする。dbディレクトリとlogディレクトリが存在しないので、(実行するとrailsが勝手に作るがトラブルを避けるために)作成しておく。

$ cp /usr/lib/ruby/gems/1.8/gems/ruby-openid-2.0.4/examples/rails_openid ~/
$ cd ~/rails_openid
$ mkdir db
$ mkdir log

サンプルではSQLite3を使うようになっている。このまま使える環境ならそれでよいが、ぼくはPostgreSQLしかセットアップしていないのでPostgreSQLを使うように修正する。

>>config/database.yml

development:
  adapter: sqlite3
  database: db/development.sqlite3

これを以下のように修正。

>>config/database.yml

postgresql:
  adapter: postgresql
  database: rails_server_development
  username: foo
  password: bar

データベースrails_server_developmentを作成しておく必要あり。

$ createdb rails_server_development

ここらで一丁、試しに起動しておくか。(実行権限が設定されていないのでrubyを忘れず)

$ ruby script/server
=> Booting WEBrick...
Your config/boot.rb is outdated: Run "rake rails:update".

なんか叱られた。言われたとおりしてみる。

$ rake rails:update
(in /home/tokusima/rails/rails_openid)
install -c -m 0755 /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/tasks/../../bin/dbconsole script/dbconsole
install -c -m 0755 /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/tasks/../../bin/performance/request script/performance/request
install -c -m 0755 /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/tasks/../../bin/process/inspector script/process/inspector

再び起動。

$ ruby script/server
=> Booting WEBrick...

      *******************************************************************
      * config.breakpoint_server has been deprecated and has no effect. *
      *******************************************************************

=> Rails 2.1.0 application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2008-06-20 23:52:01] INFO  WEBrick 1.3.1
[2008-06-20 23:52:01] INFO  ruby 1.8.5 (2006-08-25) [i386-linux]
[2008-06-20 23:52:01] INFO  WEBrick::HTTPServer#start: pid=24224 port=3000

さっそく、

http://localhost:3000/consumer

アクセスしてみると、「500 Internal Server Error」となる。

ログを確認する。

>>log/development.log

  Status: 500 Internal Server Error
  A secret is required to generate an integrity hash for cookie session data. Use config.action_controller.session = { :session_key => "_myapp_session", :secret => "some secret phrase of at least 30 characters" } in config/environment.rb
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/session/cookie_store.rb:90:in `ensure_secret_secure'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/session/cookie_store.rb:59:in `initialize'
    /usr/lib/ruby/1.8/cgi/session.rb:273:in `new'
    /usr/lib/ruby/1.8/cgi/session.rb:273:in `initialize_without_cgi_reader'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/cgi_ext/session.rb:39:in `initialize'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/cgi_process.rb:132:in `new'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/cgi_process.rb:132:in `session'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/cgi_process.rb:168:in `stale_session_check!'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/cgi_process.rb:116:in `session'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:1135:in `assign_shortcuts_without_flash'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/flash.rb:166:in `assign_shortcuts'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:523:in `process_without_filters'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:569:in `process_without_session_management_support'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/session_management.rb:130:in `process'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:389:in `process'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:149:in `handle_request'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:107:in `dispatch'
    /usr/lib/ruby/1.8/thread.rb:135:in `synchronize'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:104:in `dispatch'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:120:in `dispatch_cgi'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:35:in `dispatch'
    /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/webrick_server.rb:112:in `handle_dispatch'
    /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/webrick_server.rb:78:in `service'
    /usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
    /usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
    /usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
    /usr/lib/ruby/1.8/webrick/server.rb:162:in `start'
    /usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
    /usr/lib/ruby/1.8/webrick/server.rb:95:in `start'
    /usr/lib/ruby/1.8/webrick/server.rb:92:in `each'
    /usr/lib/ruby/1.8/webrick/server.rb:92:in `start'
    /usr/lib/ruby/1.8/webrick/server.rb:23:in `start'
    /usr/lib/ruby/1.8/webrick/server.rb:82:in `start'
    /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/webrick_server.rb:62:in `dispatch'
    /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/commands/servers/webrick.rb:66
    /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
    /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
    /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:509:in `require'
    /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:354:in `new_constants_in'
    /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:509:in `require'
    /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/commands/server.rb:39
    /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
    /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
    script/server:3

画面からはみ出して見にくくなってしまているが、2行目より。

A secret is required to generate an integrity hash for cookie session data. Use config.action_controller.session = { :session_key => "_myapp_session", :secret => "some secret phrase of at least 30 characters" } in config/environment.rb

とのことなので、言われたとおりにenvironment.rbに追記する。

>>config/environment.rb

Rails::Initializer.run do |config|
...略...
  # See Rails::Configuration for more options
  config.action_controller.session = {                         # 追記
    :session_key => "_myapp_session",                          # 追記
    :secret => "some secret phrase of at least 30 characters"  # 追記
  }                                                            # 追記
end

もちろん、_myapp_session は、_rails_openid_session などと任意の文字列に変え、some secret phrase of at least 30 characters は推測の難しい30文字以上の文字列に変える必要がある。

再び、

http://localhost:3000/consumer

へアクセスしてみると画面が表示されました。

f:id:RunOnRails:20080621102700j:image


http://localhost:3000/

へアクセスするとOPのサンプルが動作しているのがわかる。

f:id:RunOnRails:20080621102701j:image

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証