↑先頭 最新 検索 追記 編集

dev : サイト開発と blex のサイト



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