-1

私はRuby-on-RailsWebサイト(実際にはJRuby 1.5.5、Railsバージョン2.3.10を実行しています)を維持していますが、かなり奇妙なものが見られます。検索エンジンボットがアクセスすると、特定のコントローラーアクションがログに例外を引き起こしています。

ActionView::TemplateError (can't convert nil into String) on line #14 of app/vie
ws/scenarios/show_send_message.rhtml:
11:   <% if ! is_logged_in? %>
12:     <p>Your email (optional, used to contact you if necessary):<br /><%= tex
t_field_tag 'user_email', @user_email || '', :size => 50 %>
13:     <% if ! is_human? %>
14:       <%= show_simple_captcha %>
15:     <% end %>
16:   <% end %>
17:   <p><%= submit_tag 'Send' %>

...ただし、ページを人間として表示すると、正常に機能します。「show_simple_captcha」はプラグインのメソッドであり、nilを返すことはできません。

RoRが実際のブラウザとは異なる方法でボットに応答する理由を誰かが知っていますか?私はデバッグを進める方法であるため、問題の答えをあまり探していませんが、前者を喜んで受け入れます。

4

4 に答える 4

2

ページを表示しようとすると、500も取得しました。コードに問題がある可能性が高いです。たとえば、セッションまたはCookie変数が設定されていないのに、設定されていないことを期待します。

于 2010-11-11T08:44:51.167 に答える
1

ボットをエミュレートできる場合は、プラグインのデバッグを開始します。私の推測では、これはプラグイン自体のバグであり、アプリではありません。

于 2010-11-11T06:01:58.230 に答える
1

上記のエラーメッセージとコードスニペットから判断するのは難しいですが、このアクションは、サイトにログインしていることを前提としている可能性がありますか?

私が最初に考えたのは、アプリケーションにはある種の状態(Cookie、セッションなど)があり、Webサイトにアクセスすると、アプリで状態がすでに確立されているため、問題が発生しないということです。一方、Google Botは、このページにジャンプしているだけで、サイトがすでにセットアップされていると想定する状態がない可能性があります。

私の頭に浮かぶもう1つのことは、キャプチャコントロールがユーザーエージェントに基づいてレンダリングの決定を行う可能性があることです。おそらく、Google Botが使用しているユーザーエージェントは、キャプチャコントロールに好かれていません。ユーザーエージェントを変更できるFirefoxプラグインのいずれかを入手して、ログに表示される値に設定してみてください。あなたのウェブサイトをヒットして、何が起こるかを見てください。

于 2010-11-11T05:26:55.487 に答える
0

私も同じ問題に直面しています。プラグインを調べてみると、キャプチャがあるページをレンダリングしているときに、キャプチャ画像をレンダリングするために「simple_captcha_controller」が呼び出されることがわかりました(キャプチャ画像の「src」属性を見てください)。このURLでは、パラメータ'simple_captcha_key'も渡されます。キーが計算され、パラメータとしてsimple_captcha_controller'に渡されます。キーと値のペアは、テーブル'simple_captcha_date'に保存されます。したがって、人間がフォームを表示しているとき、キーは事前に計算され(値があり)、「simple_captcha_controller」に送信されるため、問題は発生しません。ただし、ボットが「表示」している場合、そのメカニズムはよくわかりませんが、「simple_captcha_controller」に渡されるキーは「表示」しません。'simple_captcha_data'テーブルに値があり、nilを返します。(simple_captcha_config.rbの'SimpleCaptchaData.get_data(key).value'はnilを返します)任意のキーが渡されると、エラーが再現される可能性があります。

于 2011-08-25T11:05:56.623 に答える