Аутентифицировать пользователя из модуля rails / lib - PullRequest
1 голос
/ 17 марта 2011

Я хочу аутентифицировать пользователей, когда они пытаются запустить TCP-соединение в моем приложении Rails. Вот текущий код, который у меня есть, он очень упрощен, но должен дать вам представление о том, что я хочу сделать.

TcpServer.rb

module TcpServer

  def receive_data(data)
    (@buf ||= '') << data
    if line = @buf.slice!(/(.+)\r?\n/)
      commands = data.split(";")
      case commands[0]
      when /start/i
        if !User.authenticate(commands[1],commands[2])
          close_connection
          puts "Subscription invalid."
        else
          put "Subscription validated."
        end
      end
    end
  end

EventMachine::run do
  host = "localhost"
  port = "5587"
  EventMachine::start_server host, port, TcpServer
  puts "TcpServer started @ #{host}:#{port}"
end

end

Что мне нужно требовать или включать для доступа к моей модели пользователя из этого модуля? Или это просто совершенно неверный способ сделать это? Если так, что вы предлагаете?

Проблема в том, что я не запускал его с Rails.

Я запускал его с:

ruby lib/TcpServer.rb

вместо:

script/runner lib/TcpServer.rb

Не включает или требует необходимости, Rails сделал это автоматически.

1 Ответ

0 голосов
/ 17 марта 2011
Dir.glob(Rails.root.join('app/models/*.rb')).each { |file| require file }

Выше будут загружены все модели, если они вам нужны (вы можете просто добавить 'user.rb' в оператор, если это необходимо, в приведенном выше комментарии вам может понадобиться указать путь и не включать часть. -> "Требуется" пользователь "").

Вы должны принять решение относительно того, считаете ли вы этот тип сервера интеграции частью работающего приложения Rails или потенциально другим «приложением», которое является частью той же кодовой базы. Вы можете оставить здесь внутреннее ядро ​​ядра и запустить свой EM-сервер с пользовательской задачей rake и загрузить env Rails через эту задачу rake.

namespace :tcp do  
  task :start, :needs => :environment do
    # server load and start here
  end
end

Если я собираюсь открыть новые средства исполнения, то я предпочитаю, чтобы они работали в отдельных процессах, чтобы не допустить возникновения ошибок в обоих случаях. (Я бы посмотрел на задания / рабочие Resque как на хороший пример того, как сохранить код в том же приложении Rails, не заставляя их работать в одном и том же процессе)

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