ruby-on-rails - 从 rails/lib 模块中验证用户

标签 ruby-on-rails class module tcp

我想在用户尝试在我的 Rails 应用程序中启动 TCP 连接时对其进行身份验证。这是我当前的代码,它非常简单,但应该让您了解我想做什么。

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 会自动完成。

最佳答案

Dir.glob(Rails.root.join('app/models/*.rb')).each { |file| require file }

如果您需要,上面的代码将加载所有模型(如果需要,您可以在语句中添加'user.rb',在上面的评论中,您可能需要指定路径而不包括“.rb”部分-> “需要‘用户’”)。

您应该决定是否认为这种类型的集成服务器应该是正在运行的 Rails 应用程序的一部分,或者可能是同一代码库的一部分的另一个“应用程序”。您可以在此处保留核心内部结构,并使用自定义 rake 任务启动您的 EM 服务器,并通过该 rake 任务加载 Rails 环境。

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

如果我要打开一种新的执行方式,那么我更愿意让它们在单独的进程中运行,以防止任何错误导致两者一起崩溃。 (我会将 Resque jobs/workers 作为一个很好的例子,说明如何将代码保留在同一个 Rails 应用程序中,而不强制它们在同一个进程中运行)

关于ruby-on-rails - 从 rails/lib 模块中验证用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5343229/

上一篇:MySQL TCP 连接

下一篇:http请求消息边界

相关文章:

ruby-on-rails - rails 3 + prawn pdf + html_safe

在 Rails 4 中使用 turbolinks 时 css 样式覆盖

CSS Hover 不接受类名

javascript - TYPO3:如何在自己的后端模块中使用元素浏览器?

ruby-on-rails - Rails 3.1 Advanced Has_many 和 belongs_to 模型连接

ruby-on-rails - 执行此命令的更像 Ruby 的方法是什么?

c++ - 如何将c++中的类划分为hpp和cpp文件

c++ - 两个构造函数,哪个是默认的?

python - 清理 Python 模块并重新启动 Mac OS X

php - Socialengine 4 - 使用 PHP 设置模块标题