Валидатор IP Rails не работает в производственной среде - PullRequest
0 голосов
/ 28 апреля 2018

Я создал специальный валидатор / проблему, которая не работает в моей производственной среде. Хотя он отлично работает для моих модульных тестов и в моей среде разработки (localhost).

Пользователь может отправлять некоторые IP-адреса в интерфейсе пользователя (через запятую), которые затем передаются моей проблеме:

Итак, что-то вроде 192.168.1.1-10,192.168.1.0/24,10.10.10.1 отправляется на модель:

class Device < ApplicationRecord
  validates :ips_scan, :ips_exclude, ip: true, on: :update
end

А в моей папке concerns есть файл с именем ip_validator.rb:

class IpValidator < ActiveModel::Validator
  def validate(record)
    if record.ips_scan
      ips = record.ips_scan.split(',')
      ips.each do |ip|
        /([0-9]{1,3}\.){3}[0-9]{1,3}(\/([1-2][0-9]|[0-9]|3[0-2]))?(-([0-9]{1,3}))?/ =~ ip
        puts ip
        record.errors.add(:ips_scan, 'is not valid') unless $LAST_MATCH_INFO
      end
    end

    if record.ips_exclude
      ips = record.ips_exclude.split(',')
      ips.each do |ip|
        /([0-9]{1,3}\.){3}[0-9]{1,3}(\/([1-2][0-9]|[0-9]|3[0-2]))?(-([0-9]{1,3}))?/ =~ ip
        record.errors.add(:ips_exclude, 'is not valid') unless $LAST_MATCH_INFO
      end
    end
  end
end

Контроллер Device:

class DevicesController < ApplicationController
  before_action :set_device, only: %i[edit show update]
  respond_to :html

  def show; end

  def edit; end

  def update
    if @device.update(device_params)
      flash[:notice] = 'Successful update'
      redirect_to request.referrer
    else
      flash[:warning] = 'Address formats allowed: x.x.x.x OR x.x.x.x-x OR x.x.x.x/x'
      redirect_to request.referrer
    end
  end

  private def set_device
    @device = Device.find(params[:id])
  end

  private def device_params
    params.require(:device).permit(:token, :nickname, :ips_scan, :ips_exclude, :status)
  end
end

Как я уже упоминал, это работает в процессе разработки, но журналы в рабочей среде просто откатываются при попытке обновления:

I, [2018-04-28T13:09:02.478701 #1]  INFO -- : Started PUT "/devices/2" for XX.XX.XXX.XX at 2018-04-28 13:09:02 +0000
I, [2018-04-28T13:09:02.479362 #1]  INFO -- : Processing by DevicesController#update as HTML
I, [2018-04-28T13:09:02.479450 #1]  INFO -- :   Parameters: {"utf8"=>"✓", "authenticity_token"=>"4bxLD+Yg/m5N2OxjGui+7jSsZdnqC1uQ6LZNUhsm36kB+2Ge0a9V11LceKrtDIJwlWR7vH4xQydff21X8qx1kQ==", "device"=>{"nickname"=>"justin test", "ips_scan"=>"192.168.0.1-10", "ips_exclude"=>""}, "commit"=>"Save", "id"=>"2"}
D, [2018-04-28T13:09:02.481431 #1] DEBUG -- :   User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 2], ["LIMIT", 1]]
D, [2018-04-28T13:09:02.482750 #1] DEBUG -- :   Device Load (0.6ms)  SELECT  "devices".* FROM "devices" WHERE "devices"."id" = $1 LIMIT $2  [["id", 2], ["LIMIT", 1]]
D, [2018-04-28T13:09:02.483744 #1] DEBUG -- :    (0.2ms)  BEGIN
D, [2018-04-28T13:09:02.485163 #1] DEBUG -- :   User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 2], ["LIMIT", 1]]
D, [2018-04-28T13:09:02.486314 #1] DEBUG -- :    (0.2ms)  ROLLBACK

Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...