Rails 4 + Rakismet + Akismet not working properly

笑着哭i 提交于 2019-12-13 02:57:15

问题


Rails 4

My application.rb:

require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require(*Rails.groups)

module Helpdesk
  class Application < Rails::Application
    config.rakismet.key = '3sf1b9e19da3'
    config.rakismet.url = 'http://127.0.0.1:3000/'
  end
end

My model:

class Ticket < ActiveRecord::Base
    include Rakismet::Model

    has_many :pictures, as: :imageable
    belongs_to :status
    belongs_to :stuff
    belongs_to :department

    validates :customer_name, :customer_email, :subject, :body, presence: true

    def init_sp(permalink, request)
        self.permalink = permalink
        self.remote_ip = request.remote_ip
        self.user_agent = request.env["HTTP_USER_AGENT"], 
        self.referrer = request.env["HTTP_REFERER"]
    end

    rakismet_attrs author: :customer_name, author_url: :permalink, author_email: :customer_email, content: :body, 
    permalink: :permalink, user_ip: :remote_ip, user_agent: :user_agent, referrer: :referrer

end

My controller:

class TicketsController < ApplicationController
  def new
    @ticket = Ticket.new
  end

  def create
    @ticket = Ticket.new(ticket_params)
    @ticket.init_sp(ticket_show_path(Ticket.generate_id), request)

    t = Logger.new(STDOUT)
    t.debug "================================"
    t.debug @ticket
    t.debug @ticket.spam?
    t.debug @ticket.akismet_response
    t.debug "================================"

    if @ticket.save
      flash[:notice] = "Ticket created successfully. Message sent."
      redirect_to ticket_show_path(@ticket.token)
    else
      render "new"
    end
  end

My Log:

#<Ticket id: 5, status_id: 1, customer_name: "Drobazko", customer_email: "drobazko@gmail.com", token: "QOI-017-QIT-078-ULR", body: "Viagra", subject: "Subj", created_at: "2014-06-14 06:45:58"
, updated_at: "2014-06-14 06:45:58", stuff_id: nil, department_id: nil, permalink: "/tickets/XQT-689-KZR-289-USQ", remote_ip: "127.0.0.1", user_agent: ["Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36", "http://127.0.0.1:3000/tickets/new"], referrer: "http://127.0.0.1:3000/tickets/new">
D, [2014-06-14T09:45:59.484731 #7688] DEBUG -- : nil
D, [2014-06-14T09:45:59.485731 #7688] DEBUG -- : false

I.e. t.debug @ticket.spam? returns nil, t.debug @ticket.akismet_response returns false

Any ideas?


回答1:


Oh man: I tried to help some guy fix his code, it was not ment as an example of how to use rakismet. You should check the rakismet docs.

  • Imho the whole init_sp thing is not needed. As mentioned in the other answer: if you call .spam? from the controller, it will have access to the request.
  • I would not make author_url=permalink, it should be a an url entered the author (of the ticket), which could be an indication if the author is a spammer. You can just leave it blank.
  • Why don't you use the Rails.logger.debug ?
  • Did you notice you just shared your akismet key with the world?

But aside of that, it is little weird that .spam? return nil, which from the source seems impossible. However a akismet_response could well be false. So afaik akismet just doesn't think it is spam.

From the rakismet documentation:

The only guaranteed way to trigger a positive spam response is to set the comment author to "viagra-test-123".



来源:https://stackoverflow.com/questions/24217458/rails-4-rakismet-akismet-not-working-properly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!