代码之家  ›  专栏  ›  技术社区  ›  davmac

奇怪的ror问题;googlebot出错,人类看到页面

  •  -1
  • davmac  · 技术社区  · 14 年前

    我维护了一个RubyonRails网站(实际上运行的是JRuby1.5.5,Rails版本2.3.10),发现了一些相当奇怪的东西。某个控制器操作在被搜索引擎bot访问时导致日志中出现异常:

    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' %>
    

    …然而,当我 view the page as a human 它工作得很好。”show_simple_captcha“是插件中的一个方法,不能返回nil。

    有人知道为什么ror对bot的响应与对真正浏览器的响应不同吗?我不是在寻找问题的答案,而是在寻找继续调试的方法,但是我很乐意接受前者。

    4 回复  |  直到 13 年前
        1
  •  2
  •   Dima Sabanin    14 年前

    当我试图查看页面时,我也得到了500。您的代码很可能有问题。例如,当会话或cookie变量没有设置时,您希望它被设置。

        2
  •  1
  •   Jason Whitehorn    14 年前

    很难从上面的错误消息和代码片段中分辨出来,但是这个操作是否有可能使您假设登录到站点?

    我的第一个想法是应用程序有某种类型的状态(cookie、会话等),当你访问网站时,你已经用应用程序建立了你的状态,因此你不会遇到任何问题。另一方面,google bot可能只是直接跳到这个页面上,并没有任何状态,你的网站可能认为已经设置好了。

    我突然想到的另一件事是,captcha控件可以基于用户代理做出一些呈现决策。也许你的验证码控件不喜欢谷歌机器人正在使用的用户代理。尝试使用其中一个允许您更改用户代理的Firefox插件,并将其设置为您在日志中看到的值。点击你的网站看看会发生什么。

        3
  •  1
  •   rwilliams    14 年前

    如果可以模拟bot,则开始调试插件。我猜这是一个插件本身的bug,而不是你的应用程序。

        4
  •  0
  •   Satyaanveshi    13 年前

    我也面临同样的问题。在调查插件时,我可以理解,在呈现有captcha的页面时,调用“简单captcha”控制器来呈现captcha图像(查看captcha图像的“src”属性)。在此URL中,还传递参数“简单验证码密钥”。将计算密钥,并将其作为参数传递给简单的“captcha”控制器。键值对存储在“简单验证码日期”表中。所以,当一个人在查看表单时,密钥是预先计算的(并且有一个值),然后发送到“简单的验证码控制器”,因此我们看不到问题所在。但是,当bot处于“查看”状态时(我不太理解其机制),传递给“简单验证码控制器”的密钥在“简单验证码数据”表中没有值,并返回nil。('simpleCaptchata.get_data(key).value'在simple_Captcha_config.rb中返回nil)