↑先頭 最新 検索 追記 編集

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



undefined method `add_referer'

blex 0.0.6 暫定版 ページのトップページ表示でエラー undefined method `add_referer'

version: blex α6 preliminary 暫定版
障害発生: $blex_start=index で、トップページとしてカテゴリ'index'を表示しようとしてエラー発生。
補足説明: blex_index.rb で、トップページ表示の指定 ($blex_start)を設定するとエラーが起こることがある。
常にエラーとなる(このサイト)と、問題がないサイト (www.kohashi.org)がある。環境は同一に見える(実際は何か条件や設定が違っているに違いない)。
$blex=startをコメントにすると、このエラーは発生しない。

状況分析: $blex_start='index'を設定時: method referer_save_triggerでエラー。
@dateが取得できず、結果として、diaryがセットされず、nil.add_referでエラーが発生している。
通常使用では問題がないので、blex_index.rb が原因を作っている。

diariesを取得するために、blexの本体 plugin で、TDiaryMonthWithoutFilter を使っている。そのタタリ(副作用)か…

blex-index.rb 抜粋:

...
if @cgi.params.empty? and $blex_start and index_catdays[$blex_start] and index_catdays[$blex_start].keys.size == 1
  @cgi.params['blogcategory'] = [ $blex_start ]
  @cgi.params['date'] = index_catdays[$blex_start].keys
...

plugin/05referer.rb 抜粋:

def referer_save_trigger
	return unless @conf.io_class.to_s == 'TDiary::DefaultIO'
	return unless @mode =~ /^(latest|day|edit|append|replace)$/

	if @date then
		diary = @diaries[@date.strftime( '%Y%m%d' )]
		diary.clear_referers if diary
	end
	referer_update( diary )
end

障害表示:

500 Internal Server Error

undefined method `add_referer' for nil:NilClass (NoMethodError)

(plugin/05referer.rb):214:in `referer_save_current'
(plugin/05referer.rb):122:in `referer_update'
(plugin/05referer.rb):25:in `referer_save_trigger'
(plugin/05referer.rb):13:in `block (2 levels) in load_plugin'
d:/usr/local/share/tdiary311/tdiary/plugin.rb:112:in `call'
d:/usr/local/share/tdiary311/tdiary/plugin.rb:112:in `block in header_proc'
d:/usr/local/share/tdiary311/tdiary/plugin.rb:111:in `each'
d:/usr/local/share/tdiary311/tdiary/plugin.rb:111:in `header_proc'
(TDiary::Plugin#eval_src):5:in `block in eval_src'
d:/usr/local/share/tdiary311/tdiary/plugin.rb:100:in `eval'
d:/usr/local/share/tdiary311/tdiary/plugin.rb:100:in `block in eval_src'
d:/usr/local/share/tdiary311/tdiary/core_ext.rb:82:in `block in safe'
d:/usr/local/share/tdiary311/tdiary/core_ext.rb:80:in `call'
d:/usr/local/share/tdiary311/tdiary/core_ext.rb:80:in `safe'
d:/usr/local/share/tdiary311/tdiary/plugin.rb:99:in `eval_src'
d:/usr/local/share/tdiary311/tdiary.rb:235:in `do_eval_rhtml'
d:/usr/local/share/tdiary311/tdiary.rb:170:in `eval_rhtml'
d:/usr/local/share/tdiary311/tdiary.rb:885:in `eval_rhtml'
d:/usr/local/share/tdiary311/tdiary/dispatcher/index_main.rb:43:in `run'
d:/usr/local/share/tdiary311/tdiary/dispatcher/index_main.rb:6:in `run'
d:/usr/local/share/tdiary311/tdiary/dispatcher.rb:21:in `dispatch_cgi'
d:/usr/local/share/tdiary311/blex-index.rb:117:in `<top (required)>'
<internal:lib/rubygems/custom_require>:29:in `require'
<internal:lib/rubygems/custom_require>:29:in `require'
d:/home/koh/html/dev/index.rb:20:in `<main>'

blex#007で、@diariesを正しい内容を生成するように更新

2012-01-20: 障害は発生しなくなった。これで良いのだろうか。

作成: 2012年1月4日 更新: 2012年1月20日
カテゴリ: close