undefined method `encoding'
blex 0.0.6 index.rb更新直後の表示で undefined method `encodings'
version: blex α6 preliminary 暫定版
障害発生: html下のindex.rbを更新した後のページで発生。
補足説明: 設定メニューのBlogKitカテゴリの初期化を行うと、正常表示となる。
と、状況的には、このように見えたけれど、原因がわかってみると、実は違う挙動だった。
単純に、古い日付のページを表示すると、障害が発生していた。
障害表示
500 Internal Server Error undefined method `encoding' for nil:NilClass (NoMethodError) /usr/local/lib/ruby/1.9.1/erb.rb:514:in `compile' /usr/local/lib/ruby/1.9.1/erb.rb:702:in `initialize' /usr/local/share/tdiary311/tdiary.rb:230:in `new' /usr/local/share/tdiary311/tdiary.rb:230:in `do_eval_rhtml' /usr/local/share/tdiary311/tdiary.rb:170:in `eval_rhtml' /usr/local/share/tdiary311/tdiary/dispatcher/index_main.rb:43:in `run' /usr/local/share/tdiary311/tdiary/dispatcher/index_main.rb:6:in `run' /usr/local/share/tdiary311/tdiary/dispatcher.rb:21:in `dispatch_cgi' /usr/local/share/tdiary311/blex-index.rb:119:in `<top (required)>' <internal:lib/rubygems/custom_require>:29:in `require' <internal:lib/rubygems/custom_require>:29:in `require' /home/koh/html/dev/index.rb:20:in `<main>'
解決
2012-01-10:
Pluginクラスの@diariesと、TDiaryLatestクラスの@diariesが同期していないことが原因。(考えてみれば当たり前なのだが)
TDiaryLatestクラスのlatestメソッドで、強引にBLEXクラスの@diariesを参照するように変更した。
前の版で、なぜ動いていたかというと、@diariesはポインタ渡しで引き継がれるため、結果的に、意図したように内容が更新されていた。
これはある意味偶然動作していた範疇なので、強制的に@diariesの内容を更新するようにした。
この変更は、本来、推奨されるものではないので、どこかでタタリが起きそうである。
作成: 2012年1月7日
更新: 2012年1月20日
カテゴリ: close