Rails: Как я могу получить доступ к запросу в классе папок lib? - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь реализовать веб-сокет через Faye Websocket.

До сих пор я могу реализовать промежуточное программное обеспечение веб-сокета на бэкенде и клиентском JS для открытия веб-сокета и отправки и получения данных с обеих сторон.

Теперь на сервере рельсов я обрабатываю сообщение websocket, полученное через мой пользовательский класс в папке lib.Я хотел бы получить IP-адрес клиента (планируя добавить информацию user_agent, когда я решу выборку IP-адреса) через «request.remote_ip» в myClass в папке lib, к сожалению, получить прямой доступ к нему невозможно.

Можетпожалуйста, назовите мне, как я могу получить доступ к объекту запроса в папке lib?

lib / myClass.rb

class myClass
  ip_address = request.remote_ip


end

#<NameError: undefined local variable or method `request' for #<myClass:0x0055c6fb18d860>
Did you mean?  require>

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Я обнаружил, что объект Faye Websocket также хранит переменные среды, которые включают в себя IP-адрес клиента и информацию агента пользователя, которую я искал.

  user_agent: socket.env["HTTP_USER_AGENT"],
  ip_address: socket.env["REMOTE_ADDR"]

Поэтому вместо объекта запроса я получил эту информацию изФайе веб-сокет объект напрямую.

0 голосов
/ 04 июня 2018

Используйте вот так: -

В lib/my_class.rb

class MyClass < Struct.new(:request)
  def self.call(request)
    new(request).call
  end

  def call
    ip_address = request.remote_ip
  end
end

И от some_controller: -

class SomeController < ApplicationController
  def some_method
    MyClass.call(request)
  end
end
...