Rails 4 Rakismet Akismet не работает должным образом

#ruby-on-rails #ruby #akismet

#ruby-on-rails #ruby #akismet

Вопрос:

Rails 4

Мое приложение.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
  

Моя модель:

 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
  

Мой контроллер:

 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
  

Мой журнал:

 #<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
  

Т.е. отлаживать @ticket.spam? возвращает nil, т.е.debug @ticket.akismet_response возвращает false

Есть идеи?

Ответ №1:

О боже: я пытался помочь одному парню исправить его код, это не было улучшено в качестве примера использования rakismet. Вы должны проверить документы rakismet.

  • Имхо, все init_sp это не нужно. Как упоминалось в другом ответе: если вы вызываете .spam? с контроллера, у него будет доступ к request .
  • Я бы не стал создавать author_url=permalink, это должен быть URL-адрес, введенный автором (билета), что может указывать на то, что автор является спамером. Вы можете просто оставить его пустым.
  • Почему вы не используете Rails.logger.debug ?
  • Вы заметили, что только что поделились своим ключом akismet со всем миром?

Но помимо этого, немного странно, что .spam? возврат nil , который из источника кажется невозможным. Однако a akismet_response вполне может быть false . Так что afaik akismet просто не думает, что это спам.

Из документации rakismet:

Единственный гарантированный способ получить положительный ответ на спам — установить для автора комментария значение «viagra-test-123».

Комментарии:

1. Спасибо за полезный ответ. Что-то не так с моей реализацией. Ввод «viagra-test-123» я все еще получаю span? = nil и akismet_response = false.

2. Какая версия драгоценного камня у вас есть?