0

私はいくつかの方法を打ち出し、コンソールでそれらをテストしてきました。問題は、サーバーで実行しているときにエラーが発生することです。具体的には、以下の最初の方法でこのNoMethodエラーが発生します。

undefined method `text' for nil:NilClass

これがコードです。これは、uri列を持つwebpage.rbファイルからのものです。

def download_page_title
  page_as_xml.at_css('title').text
end

def page_as_xml
  page_as_xml ||= Nokogiri::HTML(open(page_uri))
end

def page_uri
  base_uri = Site.find_by_id(self.site_id).homepage #always has "/" at end
  if self.url == base_uri
    page_uri = base_uri
  else
    page_uri = "#{base_uri}#{self.url}"
  end
end

私が間違っていることについて何か考えはありますか?また、コンソールでは物事がスムーズに進むのに、サーバーでは失敗する理由はありますか?

編集:これは私がコンソールで行っていることの例です。

1.9.3p194 :262 > a = Webpage.new( url: "http://www.cnn.com/", site_id:165)
 => #<Webpage id: nil, url: "http://www.cnn.com/", site_id: 165, created_at: nil, updated_at: nil, title: nil> 
1.9.3p194 :263 > a.download_page_title
  Site Load (0.3ms)  SELECT "sites".* FROM "sites" WHERE "sites"."id" = 165 LIMIT 1
 => "CNN.com - Breaking News, U.S., World, Weather, Entertainment & Video News" 
4

1 に答える 1

1

これは、page_as_xml.at_cssが戻ってきて、そのオブジェクトnilを呼び出そうとしていることを意味します。.textnil

だから、なぜそれが戻ってくるのかを理解してnilください。たとえば、ダウンロードしているページで、titleCSSセレクターからアクセスできるタグが指定されていませんか?ページが空白ですか、それとも結果が返されませんか?エラーステータス(2xx HTTPステータス範囲外のもの)を返しますか?

別の言い方をすれば、テストに使用しているページとサーバーが実際に取得しているページの間には、おそらく上流の違いがあります。

nil呼び出しから戻るページを処理する(または例外をスローする、またはログ/レポートする)必要がある場合page_as_xml.at_cssがあります。これは、ソフトウェアが何をする必要があるかによって異なります。

于 2012-07-24T15:56:24.023 に答える