[英]Authenticate User from within rails /lib module
我想在用戶嘗試在我的Rails應用程序中啟動TCP連接時對用戶進行身份驗證。 這是我當前擁有的代碼,它非常簡單,但是應該讓您了解我想做什么。
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 env。
namespace :tcp do
task :start, :needs => :environment do
# server load and start here
end
end
如果我要打開一種新的執行方式,那么我寧願讓它們在單獨的進程中運行,以防止任何錯誤導致兩者並存。 (我將Resque作業/工作人員視為一個很好的示例,該示例說明如何將代碼保留在同一Rails應用程序中而不強制它們在同一進程中運行)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.