基礎Ruby on RailsのasagaoをRails2.3に対応させる

      2012/08/15

基礎Ruby on RailsのasagaoをRails2.2に対応させる
若干合わなかったのでサポート。

config.action_view.cache_template_extensions= で始まる行を config/environments.development.rb から削除すればよいそうです。」

これだけだとまだエラーが・・・

-------------------------------
rake aborted!
A key is required to write a cookie containing the session data. Use config.action_controller.session = { :key => "_myapp_session", :secret => "some secret phrase" } in config/environment.rb
-------------------------------
というわけで、
config/environment.rb
にある

# config.action_controller.session_store = :active_record_store
こいつを下記のようにした

config.action_controller.session = { :key => "_riken_session", :secret => "適当な半角英数文字列30文字以上"}

さて、次。まだエラーが続く。

--------------------
rake aborted!
a YAML error occurred parsing db/fixtures/development/members.yml. Please note that YAML must be consistently indented using spaces. Tabs are not allowed. Please have a look at http://www.yaml.org/faq.html
The exact error was:
  NameError: uninitialized constant Member::Digest
--------------------
おお、まじっすか。tabは使ってないんだけど・・・(謎

と思ったら、ここが原因。。。

--------------------
hashed_password: <%= Member.hashed_password('password', 12345678) %>
--------------------
なんだろうと思案。
とりあえず、こいつを探してみる→hashed_password

$rak hashed_password

するといろいろ出てきた。
---------------------------------
db/development_structure.sql
  79|  `hashed_password` varchar(255) default NULL,

db/migrate/003_alter_members.rb
   7|    add_column :members, :hashed_password, :string
  24|    remove_column :members, :hashed_password

db/fixtures/production/members.yml
  16|  hashed_password: <%= Member.hashed_password('password', 12345678) %>

test/unit/member_test.rb
 111|    assert_not_nil member.hashed_password
 113|    assert_equal Digest::SHA1.hexdigest(sprintf("%s%08d", 'abc', member.salt)), member.hashed_password
 170|  # attributes= で直接 salt, hashed_password,
 175|    pw = m.hashed_password
 179|      'salt' => '', 'hashed_password' => 'abc',
 185|    assert_equal pw, m.hashed_password

test/fixtures/members.yml
  16|  hashed_password: <%= Member.hashed_password('password', 12345678) %>
  33|  hashed_password: <%= Member.hashed_password('password', 23456789) %>
  50|  hashed_password: <%= Member.hashed_password('password', 34567890) %>
  67|  hashed_password: <%= Member.hashed_password('password', 45678901) %>
  85|  hashed_password: <%= Member.hashed_password('password', 99999999) %>

app/models/member.rb
   7|  attr_protected :salt, :hashed_password,
  90|    if member and member.hashed_password ==
  91|                    hashed_password(password, member.salt)
  99|  def self.hashed_password(password, salt)
 108|      self.hashed_password = Member.hashed_password(pw, self.salt)
------------------------------

最初が一番怪しい。
------------------------------
db/development_structure.sql
  79|  `hashed_password` varchar(255) default NULL,
------------------------------
たぶんvarchar(255)からはみ出てるんだろうなぁ。
ということで、
db/development_structure.sql
の79行目を
------------------------------
#  `hashed_password` varchar(255) default NULL,
  `hashed_password` text default NULL,
------------------------------
こいつに書き換えて
$ rake db:initialize --trace

通りましたよっと!
これでWebサーバを起動すればトップページが見られると思います。

ふぅ~

>>エラーの原因に気付いたのはこちらのお陰
--------------

YAMLエラーメッセージには、かなり惑わされた。

Tabや?以外にも、使用できない文字が結構ありそうなので、詳しくYAMLの仕様について調べてみるつもり。

--------------

同じく惑わされましたとさ・・・ ありがとうございました!

 

おすすめ記事一覧

 - Tips